我试图找出在触发MvcEvent :: EVENT_DISPATCH_ERROR时转发到另一个控制器/操作的最佳方法。
目前我在模块的bootstrap中所拥有的是:
$eventManager = $event->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($e) {
$routeMatch = new Router\RouteMatch(array('controller'=>'my-controller','action'=>'my-action');
}, 100);
我的问题是:
对于后台,我正在升级旧的ZF1应用程序,我使用前端插件来执行此操作。这是一个cms应用程序,当没有找到匹配的路由时,cms控制器用于匹配路径与db入口和返回页面。
由于
亚当
答案 0 :(得分:3)
您需要使用新路线重新发送活动。
创建新路线后,请添加以下内容:
$newEvent = clone $e;
$e->stopPropagation(TRUE);
$newEvent->setRouteMatch($routeMatch);
$eventManager->trigger('dispatch', $newEvent);
答案 1 :(得分:0)
当用户想要访问其角色不允许的操作时,这就是我这样做的方式。使用para中的$ e:
$match = $e->getRouteMatch();
$match->setParam('controller', 'User\Controller\Account');
$match->setParam('action', 'denied');
我希望它有所帮助。