Thanks Ralph,
This is very helpful. I will have to come back to this issue later on,
especially as I get a better handle on the framework, in general. You seem
to think that using the error handling functionality that comes with the
framework is the way to go. I am sure you will be vindicated on my end at
some point, but for the time being I will embrace my stubbornness and
proceed by wrapping the the run call with a try/catch. I just feel like the
ErrorController limits itself too much in terms of what errors it catches.
For the time being, I need to sort out how to maintain my querystring when I
redirect.
Thanks,
Jeremy
Ralph Schindler-2 wrote:
>
> Hey Jeremy,
>
> Ultimately, it all depends on what kind of exceptions are thrown, where
> they are thrown, and how the framework is setup to handle them. There's
> lot of moving parts, and a default application already takes care of
> them form you for the most part.
>
> Out of the box, the Front Controller is set to NOT throw exceptions.
> Instead, it catches any exceptions thrown during dispatch, stores them
> in the response object, and forwards the dispatch loop to the
> ErrorHandler/ErrorController (which is on by default).
>
> Furthermore, while you are in 'development mode' (as setup by your
> index.php, typically by an environment variable), your application will
> instruct the ErrorController to display exceptions, you'll see this line
> in your application.ini:
>
> resources.frontController.params.displayExceptions = 1
>
> which is overriding the default from production which is false.
>
> I would suggest sticking with the initial project structure and default
> values in all honesty. The setup is quite good, and very informative
> when there are errors occurring.
>
> So lets look at where exceptions are thrown:
>
> [index.php is hit]
>
> $application is created.
>
> $application->bootstrap() is run.
>
> * exceptions can be thrown here form any resource that
> could not be setup either by configuration (resource.* values)
> or by Bootstrap::_init*() methods. Either way, you can't trust
> you have any part of your application setup, in this case, this
> is beyond a 500 error. These types of exceptions should never
> be thrown in production anyway. If you are getting exceptions
> from bootstrapping, you need to take care of the problem sooner.
>
> $application->run() is called.
>
> * This effectively is Zend_Controller_Front::getInstance()->run();
> For all intents and purposes, any exception thrown here is a 500
> or 404 error, and generally can be handled by ErrorController.
>
> * The only exceptions that make it hard to display a full page
> would be exceptions thrown FROM the ErrorController, or exceptions
> throw FROM the Layout. As you can see, if neither of those
> are in good working order, it's hard to use them to build a page.
>
> If you want to use a try/catch block in your index.php, I would use it
> only on the ->bootstrap() call of the $application, not run() as nothing
> will be emitted. If you insist on throwing exceptions and catching them
> in the index.php, add this value to you application.ini:
>
> resources.frontcontroller.throwExceptions = 1
>
> Hope all that helps,
> Ralph Schindler
>
> On 12/15/10 3:43 PM, jalexander3 wrote:
>>
>> Hello,
>>
>> I have read about the ErrorController that comes standard with the
>> framework. It seems to only handle certain errors pertaining to missing
>> MVC
>> components--that's fine, I can use that. However, for my purposes I think
>> I
>> need a better understanding of URL rewriting and how the framework works
>> in
>> general.
>>
>> Anyway, here is what I have done in terms of error handling. It's pretty
>> simplistic.
>>
>> My application entry point is wrapped in a try-catch. When an exception
>> pops
>> anywhere in the application, I run a couple of procedures that then send
>> an
>> email and log the message, etc.
>>
>> /* Wrap the entire application in an error handler*/
>> try
>> {
>> $application->bootstrap()
>> ->run();
>> }
>> catch (Exception $e)
>> {
>> require_once 'ErrorHandler.php';
>> HandleException($e);
>> }
>>
>> What I really want to do is just pop a jquery dialog box on the page that
>> pops the error (or the previous page if there is something like a 404
>> error). In order to do this I am trying the following:
>>
>> catch (Exception $e)
>> {
>> //require_once 'ErrorHandler.php';
>> //HandleException($e);
>>
>> /*
>> Get the current layout and relocate to it,
>> passing a flag to display the error dialog
>> */
>>
>> $currentLayout=$application->getBootstrap()->getResource('layout')->getLayoutPath();
>> header('Location: ' . $currentLayout . '?action=error');
>> }
>>
>> The problem is, I don't understand enough about what is going on behind
>> the
>> scenes. $currentLayout points to the layouts directory. The querystring
>> is
>> lost as "http://localhost/TAW/application/layouts?action=error" then
>> points
>> back to a valid page.
>>
>> At the end of the day, it doesn't make sense to point back to a "valid"
>> page...I would probably point to an "error" page that utilizes a defined
>> layout. But in any case, I still need to maintain that querystring.
>>
>> Does anyone have any thoughts about this entire process? Some best
>> practices? Or more specifically, how to resolve the issue I am having
>> concerning the querystring?
>>
>> Much appreciated!
>>
>> Jeremy
>
>
--
View this message in context:
http://zend-framework-community.634137.n4.nabble.com/Error-handling-in-Zend-tp3089950p3091683.html
Sent from the Zend Framework mailing list archive at Nabble.com.