2017-03-20 3 views
0

Wir arbeiten mit der ZF2 Exception Behandlung und protokollieren alle Ausnahmen in einer Protokolldatei. Wir erhalten nicht die genauen Details der Datei- und Zeilennummer mit den Methoden $e->getFile() and $e->getLine().Zend Framework Exception Behandlung: Exception Details

Gibt es einen anderen Ansatz, um die genaue Datei/Controller/Aktion/Modell und Zeilennummer zu erhalten? Wir erhalten die Datei als DBAdapter.php anstelle des genauen Modellnamens.

Unten ist das Codebeispiel, wo ich versuche, die genaue Spur der Fehlerdatei und Zeile des Auftretens des Fehlers zu erhalten. Ich verwende ein Controller-Plugin, von dem alle Ausnahmen in der Fehlerprotokolldatei protokolliert werden.

Public function indexAction(){ 
      try{ 
       $model = $this->getServiceLocator()->get('Application\Model\SomeModel'); 
       $model ->wrongMethod()->toArray(); //worngMethod i.e method does not exists in model. 
      }catch(\Exception $e){ 
       return $this->LibraryPlugin()->showExceptionMessage($e, $this); 
      } 
     } 

    //LibraryPlugin – Controller Plugin 
     public function showExceptionMessage(\Exception $e, $current_obj) 
     { 
      //$e -> Exception Detials 
      $e->getMessage ->C:\xampp\htdocs\project\config\package\ZF2\library\Zend\Db\TableGateway\AbstractTableGateway.php 
      $e->getLine() -> 482 
     } 



- Exception Object 
[message:protected] => Invalid method (wrongMethod) called, caught by Zend\Db\TableGateway\AbstractTableGateway::__call() 
    [string:Exception:private] => 
    [code:protected] => 0 
    [file:protected] => C:\xampp\htdocs\project\config\package\ZF2\library\Zend\Db\TableGateway\AbstractTableGateway.php 
    [line:protected] => 482 

I can see within trace which has the exact details, but does not remain at the same index for all kinds of exceptions ie.( 
InvalidArgumentException -> $e->getTrace()[0] 
PDOException -> $e->getTrace()[2] 
InvalidQueryException-> $e->getTrace()[3] 
ServiceNotCreatedException -> $e->getTrace()[5] 
). 
Is there a way to get the exact error file name with line number, without explicitly unpacking and getting the details from trace object. 
Ex : getFile()-> SomeController.php, getLine()-> line in IndexController where the invalid method is being called. 

Thanks in advance. 
+0

Zeigen Sie uns, Code wie gehen Sie diese Ausnahmen – SzymonM

Antwort

0

Es ist möglich, dass Sie zurückverfolgen und die Kette von Ausnahmen erhalten möchten, anstatt nur die letzte in der Kette.

wie:

$exception = $exception->getPrevious(); // grab previous exception. 

Sie konnten alle bisherigen Ausnahmen mit so etwas wie diese greifen:

while ($exception instanceof \Exception) { 
    $exceptions .= sprintf("Exception: %s\nTrace:\n%s\n", $exception->getMessage(), $exception->getTraceAsString()); 
    $exception = $exception->getPrevious(); 
} 
Verwandte Themen