Zend Framework 2 - 在布局中获取控制器和操作名称

时间:2013-01-10 10:17:06

标签: php zend-framework2

我试图在布局文件中获取控制器名称和操作名称。但不可能。在ZF1中,我们使用Front Controller实例来获取控制器和操作名称。我已经浏览了很多网站。但是没有解决方案。我如何进入ZF2?

2 个答案:

答案 0 :(得分:5)

控制器及其视图脚本是分离的。实际上,单个请求中可能涉及多个控制器。

如果您希望调度请求的控制器和操作,可以通过挂钩到dispatch事件并在附加的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
    );

答案 1 :(得分: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()
控制器中的