2009年3月5日星期四

Re: [fw-mvc] postDispatch() runs after _foward

Actually, I'm pretty sure you can.

Zend_Layout registers its Controller Plugin at position 99 in the plugin
stack. (ErrorHandler is regisered at position 100.)

If you register your plugin earlier than it,
$pluginBroker->registerPlugin(new My_Plugin, 50); // for example

It will run before both the ErrorHandler and the Zend_Layout plugin.

-ralph


On 3/5/09 11:51 AM, "Yi Tang" <ytang@mbira.com> wrote:

> well that actually doesn't work for what we're trying to do. Once
> inside of dispatchLoopShutdown, you can't add anything to the view
> render anymore as the view rendering is already complete. So for now
> we're checking $request->isDispatched() inside of the postDispatch() hook.
>
> anyhow, our issue is solved. however whether postDispatch should be
> called when dispatched flag is false is still somewhat likely to cause
> confusions.
>
> Yi Tang wrote:
>> ah, excellent point. thanks.
>>
>> Hector Virgen wrote:
>>> Maybe you should be using the dispatchLoopShutdown() hook if you want
>>> code
>>> to run at the end of the dispatch loop.
>>>
>>> -Hector
>>>
>>>
>>> On Thu, Mar 5, 2009 at 9:15 AM, Yi Tang <ytang@mbira.com> wrote:
>>>
>>>
>>>> well then, don't you think it's more logical to at least not trigger
>>>> postDispatch() until the dispatch loop is complete? "postDispatch"
>>>> gives the
>>>> connotation that it'll only run after the dispatch loop is complete.
>>>>
>>>> Matthew Weier O'Phinney wrote:
>>>>
>>>> -- Yi Tang <ytang@mbira.com> <ytang@mbira.com> wrote
>>>> (on Wednesday, 04 March 2009, 05:17 PM -0600):
>>>>
>>>>
>>>> It appears the postDispatch hook of controller plugins get triggered
>>>> even with _foward calls, when dispatched is still false. Is it a
>>>> bug or
>>>> intentional? It doesn't seem very logical for it to be intentional.
>>>>
>>>>
>>>> Yes, it's intentional. _forward() sets the "isDispatched" flag of the
>>>> request to false, and that flag is checked for as the conditional of
>>>> the
>>>> dispatch loop. During preDispatch(), it can be used to indicate that
>>>> the
>>>> current action should not be executed, but after that, it is simply
>>>> used
>>>> to hint to the dispatch loop that an additional action needs to be
>>>> taken.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>

--
Ralph Schindler
Software Engineer | ralph.schindler@zend.com
Zend Framework | http://framework.zend.com/

没有评论: