-- 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/