从模块转发到另一个控制器/操作

时间:2015-09-05 06:19:49

标签: zend-framework2

我试图找出在触发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);

我的问题是:

  1. 如何发送$ routeMatch?
  2. 这是正确的方法吗?
  3. 对于后台,我正在升级旧的ZF1应用程序,我使用前端插件来执行此操作。这是一个cms应用程序,当没有找到匹配的路由时,cms控制器用于匹配路径与db入口和返回页面。

    由于

    亚当

2 个答案:

答案 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');

我希望它有所帮助。