2016-06-14 3 views
3

Ich möchte die Fehlerbehandlung in module.php hinzufügen alle Fehlermeldungen in Flash Messenger hinzuzufügen und zu einer bestimmten Seite (in meiner Anforderung) umleiten:Zugriff auf Controller-Plugins in module.php ohne Verwendung eines Controller-Objekts in ZF2 ..?

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')); 
    } 

Aber in manchen Fehlern nicht definierte Methode Plugin seinen Wurf Anruf auf $e->getTarget() weil in einigen Fällen Fehler vor Plugin-Bindings generiert werden. Ich möchte eine Möglichkeit, auf redirect and flash messenger plugins zuzugreifen, ohne einen Controller zu beziehen.

Antwort

4

Nach vielen Arten definiert auf Google versucht ich unten Art und Weise Arbeits gefunden:

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')); 
    } 

Ich habe diese Lösung hier gepostet, so dass es andere Zeit bei der Suche wieder das gleiches zu speichern.