The Plugin Broker (Zend_Controller_Plugin_Broker) _should_ catch any exceptions thrown by controller plugins. Well, not should, it does. Perhaps this is an issue with how you're instantiating your plugins??

Waigani wrote:
Thanks for the run down. Is it possible to throw an error in a plugin though?
So far the errorController has missed it.



Jason Webster wrote:
Waigani wrote:
Is it possible? I want to throw an exception in the preDispatch of a
plugin
if you are not allowed to view the page. I then want to handle that
exception via the errorController. I can wrap the $front->dispatch() in a
try / catch and catch the exception in the bootstrap, but then how do I
forward that onto the errorController, as the front controller has not
been
dispatched? I've read the manual and other posts and have not found an
answer nor an alternative method.
I think you may be misunderstanding the dispatching process of the front controller. Here's a run down:

    1.  Request/Response/Router/Dispatcher initialization
    2.  routeStartup()
        * call plugins registered with this hook
    3.  Routing
        * Updates Request object based on matched information from
          routing
    4.  routeShutdown()
        * call plugins registered with this hook
    5.  dispatchLoopStartup()
        * call plugins registered with this hook
        6.  preDispatch()
            * call plugins registered with this hook
        7.  Dispatch action
            8.  action helper preDispatch()
            9.  action controller preDispatch()
            10. action method
                * UNLESS a _forward() or redirect has occurred
            11. action controller postDispatch()
            12. action helper postDispatch()
        13. postDispatch()
            * call plugins registered with this hook
        /* repeat 6 - 13 as necessary */
    14. dispatchLoopShutdown()
        * call plugins registered with this hook
    15. send response

The preDispatch hooks of action helpers and action controllers ad re steps 8 and 9, respectively. The ErrorHandler front controller plugin is registered basically right away.

In short, if you throw an exception in the preDispatch of a controller/action it _will_ be caught by the ErrorHandler plugin, and thus forwarded to the error controller.




Reply via email to