2009年3月5日星期四

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

You're not the first, Yi. I ran into this a while back, which confused me at first. After reviewing the documentation more closely, I realized what the postDispatch hook really is. Since plugins are outside the scope of the action controller, the only way they can know about a forward is to check the isDispatched flag. At least that's how I see it.

-Hector


On Thu, Mar 5, 2009 at 2:31 PM, Yi Tang <ytang@mbira.com> wrote:
lol..  It is an edge then.  we did run into this issue with a special Plugin where it renders a special view script based on the current user's identity.  However there was a _forward called before hand, so that plugin was being called twice to do the same thing. 

Perhaps not a lot of developers have tried to use the postDispatch hook.  Our group of developers could be the first ones, or the first ones who had noticeable effects.  If we weren't rendering something using that plugin, we probably wouldn't have noticed either.



Matthew Weier O'Phinney wrote:
-- Yi Tang <ytang@mbira.com> wrote (on Thursday, 05 March 2009, 11:51 AM -0600):   
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.     
Potentially. But, honestly, in the 2.5 years since I first added the pre/postDispatch() hooks, I've never heard anybody complain about it before now -- and it's worked this way all along. :)     
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.                    
           
  

没有评论: