2015-09-05 5 views
1

Я пытаюсь найти лучший способ переслать другой контроллер/действие при запуске MvcEvent :: EVENT_DISPATCH_ERROR.Перейти к другому контроллеру/действию из модуля

То, что я до сих пор в начальной загрузки модуля:

$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. Это правильный путь?

Для фона, я обновляю старое приложение ZF1, где я использовал плагин frontend для этого. Это приложение cms, когда никакие совпадающие маршруты не найдены, то контроллер cms используется для сопоставления маршрута с страницей входа и возврата db.

Благодаря

Адам

ответ

3

Вам нужно будет повторно отправить мероприятие новым маршрутом.

После создания Ваш новый матч маршрут добавить это:

$newEvent = clone $e; 
$e->stopPropagation(TRUE); 
$newEvent->setRouteMatch($routeMatch); 
$eventManager->trigger('dispatch', $newEvent); 
+1

Спасибо. У меня теперь другая проблема :) Но это работает :) – tweakmag

+0

Не возражаете взглянуть на http://stackoverflow.com/questions/32430595/router-match-not-returning-matchedroutename, что является моей новой проблемой. Очень важно к этому. – tweakmag

0

Это так, как я делаю это, когда пользователь хочет получить доступ действий не разрешено для своей роли. Использование ваших $ e из параметров:

$match = $e->getRouteMatch(); 
$match->setParam('controller', 'User\Controller\Account'); 
$match->setParam('action', 'denied'); 

Надеюсь, это поможет.

+0

Спасибо, что нашли время, чтобы ответить на Конти. По существу, вы делаете то же, что и я. Тем не менее, поскольку я делаю это в событии dispatch_error, просто установить routeematch недостаточно, поскольку «диспетчеризация» по существу произошла и определена, что нет соответствующего маршрута. Следовательно, почему я возвращаю маршрут ... Я просто не знаю, как перераспределить. – tweakmag

+0

Я рад, что другое решение устранило вашу проблему, я собираюсь проверить его в своем приложении, хотя мой код работает :). – Conti

Смежные вопросы