-- Mike Fern <[EMAIL PROTECTED]> wrote (on Wednesday, 15 August 2007, 09:30 PM +0700): > >On 8/10/07, Matthew Weier O'Phinney <[EMAIL PROTECTED]> wrote: > > > > You can only trap E_USER_*, E_NOTICE, E_WARNING, E_STRICT, and the new > > E_RECOVERABLE_ERROR in an error handler; fatal, parse, and compile > > errors cannot be trapped. > > > > You typically don't want to trap stricts or notices, and you have to > > pick and choose which warnings you really need to handle. > > > > That said, I often create an error handler that checks the error type, > > and if considered severe enough, throws it as an exception. This will > > then be handled in your error handler controller. > > > > Hi Matthew, > I have a problem with exception trapping in the front controller. > > Let's say the controller name is dummy and action name is ne which is > a nonexistent action. > The url is invoked like this: sitename.com/dummy/ne > > Some snippets from the bootstrap file are as following > $controller = Zend_Controller_Front::getInstance(); > > $controller->setControllerDirectory(array( > 'default' => './app/default/controllers', > 'admin' => './app/admin/controllers')); > $controller->setParam('noViewRenderer', true); > $controller->returnResponse(true); > $response = $controller->dispatch(); //line X > ... > > line X will yield a fatal error message saying uncaught exception > along with stack trace which is good. > > if the above code is altered into this one: > $controller = Zend_Controller_Front::getInstance(); > > $controller->setControllerDirectory(array( > 'default' => './app/default/controllers', > 'admin' => './app/admin/controllers')); > $controller->setParam('noViewRenderer', true); > $controller->returnResponse(true); > try { > $response = $controller->dispatch(); //line X > if($response->isException()) { > throw new Exception; > } > ... process output here > } catch (Exception $e) { > print $e->getMessage(); > } > > the exception is now trapped but the stack trace is not there.
$response->isException() indicates an exception exists. You can then fetch the exception stack (response object puts all exceptions trapped into an internal array) by using: $exceptions = $response->getException(); You can then loop over each exception in that list to get stack traces. > my question: > what's the best practice in trapping exceptions and output the stack > trace? fatal error message and stack trace are good, but the output is > not customizable. > > Regards, > Mike > -- Matthew Weier O'Phinney PHP Developer | [EMAIL PROTECTED] Zend - The PHP Company | http://www.zend.com/