0

我试图在布局文件中获取控制器名称和动作名称。但不能。在 ZF1 中,我们使用 Front Controller 实例来获取控制器和动作名称。我浏览了很多网站。但是没有解决办法。怎么进ZF2?

4

2 回答 2

5

控制器和它们的视图脚本是解耦的。事实上,一个请求可能涉及多个控制器。

如果您想要将请求分派到的控制器和操作,您可以通过挂钩到分派事件来注入它们,并在附加的 ViewModel 中注入控制器和操作名称。

一种方法是在 Bootstrap 事件中,它应该在 Module 类中。

public function onBootstrap(\Zend\EventManager\EventInterface $e)
{
    $app = $e->getApplication();
    $app->getEventManager()->attach(
        'dispatch',
        function($e) {
            $routeMatch = $e->getRouteMatch();
            $viewModel = $e->getViewModel();
            $viewModel->setVariable('controller', $routeMatch->getParam('controller'));
            $viewModel->setVariable('action', $routeMatch->getParam('action'));
        },
        -100
    );
于 2013-01-10T11:05:44.943 回答
0

我得到了上面的答案,但我不得不使用 sharedManager 将视图传递给控制器

    $app = $e->getApplication();
    $app->getEventManager()->getSharedManager()->attach(
        __NAMESPACE__,
        'dispatch',
        function($e) {
            $routeMatch = $e->getRouteMatch();
            $viewModel = $e->getViewModel();
            $viewModel->setVariable('controller', $routeMatch->getParam('controller'));
            $viewModel->setVariable('action', $routeMatch->getParam('action'));
            $controller = $e->getTarget();
            $controller->view = $viewModel;
        },
        100
    );

如果我想按照我必须做的那样使用上面的答案

    $this->getEvent('dispatch')->getViewModel()

在控制器中

于 2013-01-11T17:15:36.127 回答