Zend framework2 从模块转发到另一个控制器/操作
我试图找出在触发MvcEvent::EVENT_DISPATCH_错误时转发到另一个控制器/操作的最佳方式 到目前为止,我在模块的引导中了解到的是:Zend framework2 从模块转发到另一个控制器/操作,zend-framework2,Zend Framework2,我试图找出在触发MvcEvent::EVENT_DISPATCH_错误时转发到另一个控制器/操作的最佳方式 到目前为止,我在模块的引导中了解到的是: $eventManager = $event->getApplication()->getEventManager(); $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($e) { $routeMatch = new Router\RouteMatch(
$eventManager = $event->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($e) {
$routeMatch = new Router\RouteMatch(array('controller'=>'my-controller','action'=>'my-action');
}, 100);
我的问题是:
Adam当用户想要访问其角色不允许的操作时,我就是这样做的。使用params中的$e:
$match = $e->getRouteMatch();
$match->setParam('controller', 'User\Controller\Account');
$match->setParam('action', 'denied');
我希望这会有所帮助。您需要使用新路线重新发送活动 创建新路线匹配后,添加以下内容:
$newEvent = clone $e;
$e->stopPropagation(TRUE);
$newEvent->setRouteMatch($routeMatch);
$eventManager->trigger('dispatch', $newEvent);
感谢您抽出时间回答Conti。基本上你和我做的一样。但是,由于我在dispatch_error事件中执行此操作,仅设置routematch是不够的,因为“dispatch”基本上已经发生,并且确定没有匹配的路由。因此,为什么我要重置路线。。。我只是不知道如何重新发送。我很高兴其他解决方案解决了您的问题,我也在考虑在我的应用程序中测试它,尽管我的代码可以工作:)。谢谢。我现在有一个不同的问题:)但是这个有效:)你介意看看哪一个是我的新问题吗。。与此非常相关。