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