0

我正在使用 ZF2 开发一个站点。页脚中的一个部分包含推文。我可以获取推文,但我不确定如何在布局中显示它们。我有以下想法,但不确定使用哪种方法

  1. 创建一个控制器插件并在每个请求上使用它。
  2. 创建一个 ViewHelper 从 获取推文ServiceLocator并在布局中调用助手
  3. 将一个事件附加到MvcEvent::EVENT_RENDERmodule.php 中,它将 html 设置为布局变量。

如果还有其他更好的方法,请告诉我。

4

1 回答 1

1

您所指的完全是ViewHelper的任务。所以你的第二种方法是正确的。你这里有两层

ServiceLayer - 从 DB / Twitter / DataSource 获取推文

ViewLayer - 显示 ServiceLayer 给你的任何东西

现在的问题是你想做什么?你想要一个 ViewHelper 来简单地呈现一些给定的推文吗?然后你不需要访问它TweetService本身,而是给定的数据。像这样的东西:

'view_helpers' => array(
    'factories' => array(
        'tweetRenderer' => function ($vhm) {
            $tweetService  = $vhm->getServiceLocator()->get('my-tweetservice');
            $tweetRenderer = new \My\View\Helper\TweetRenderer();
            return $tweetRenderer->render(
                $tweetService->getAllTweets()
            );
        }
    )
)

// in your view then:
echo $this->tweetRenderer();

但最常见的是这样的事情并不是那么方便。您可能希望至少能够更改要呈现的推文的用户名。所以你需要将实际TweetService注入到你的 ViewHelper 中,然后使用 ViewHelper 的__invokable()功能来设置渲染器的参数:

'view_helpers' => array(
    'factories' => array(
        'tweetRenderer' => function ($vhm) {
            $tweetService  = $vhm->getServiceLocator()->get('my-tweetservice');
            return new \My\View\Helper\TweetService($tweetService);
        }
    )
)

// TweetService.php
public function __construct(TweetServiceInterface $tweetService) {
    $this->tweetService = $tweetService;
}

public function __invoke($username) {
    return $this->render(
        $this->tweetService->fetchTweetsForUser($username)
    ):
}

// in your view then:
echo $this->tweetRenderer('manuakasam');

这就是基础知识:)

于 2013-09-14T03:29:05.960 回答