Zend Framework2 — Как получить доступ к плагинам контроллера в module.php без использования какого-либо объекта контроллера в ZF2 ..?

Я хочу добавить обработку ошибок в module.php Чтобы добавить все сообщения об ошибках во Flash Messenger и перенаправить на определенную страницу (по моему требованию):

public function handleError(MvcEvent $e) {
$exception = $e->getParam('exception');
$controller = $e->getTarget();
//echo $exception->getMessage(); exit;
if (!$e->getApplication()->getServiceManager()->get('AuthService')->hasIdentity()) {
$controller->flashMessenger()->addErrorMessage("Session Expired..!!");
return $e->getTarget()->plugin('redirect')->toRoute('auth', array('action' => 'login'));
}

switch ($exception->getCode()) {
case "2003" :
$controller->flashMessenger()->addErrorMessage("Unable to connect database..!!");
break;

default :
$controller->flashMessenger()->addErrorMessage($exception->getMessage());
break;
}

$e->getApplication()->getServiceManager()->get('AuthService')->clearIdentity();
return $e->getTarget()->plugin('redirect')->toRoute('auth', array('action' => 'login'));
}

Но в некоторых ошибках он вызывает вызов неопределенного плагина метода $e->getTarget() потому что в некоторых случаях ошибки генерируются перед привязками плагинов. Я хочу способ доступа redirect and flash messenger plugins без ссылки на какой-либо контроллер.

3

Решение

После попытки многих способов, определенных в Google, я нашел следующий способ работы:

public function handleError(MvcEvent $e) {

$exception = $e->getParam('exception');
$sm = $e->getApplication()->getServiceManager();
$flashmessenger = $sm->get('ControllerPluginManager')->get('flashmessenger');
//echo $exception->getMessage(); exit;
if (!$e->getApplication()->getServiceManager()->get('AuthService')->hasIdentity()) {
$flashmessenger->addErrorMessage("Session Expired..!!");
return $sm->get('ControllerPluginManager')->get('redirect')->toRoute('auth', array('action' => 'login'));
}

switch ($exception->getCode()) {
case "2003" :
$flashmessenger->addErrorMessage("Unable to connect database..!!");
break;

default :
$flashmessenger->addErrorMessage($exception->getMessage());
break;
}

$e->getApplication()->getServiceManager()->get('AuthService')->clearIdentity();
return $sm->get('ControllerPluginManager')->get('redirect')->toRoute('auth', array('action' => 'login'));
}

Я разместил это решение здесь, чтобы оно могло сэкономить время другим при повторном поиске того же самого.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]