Hi guys! Larry, correct me if I'm wrong, but basically here is the situation (I tried catching up on the Drupal thread, but I was starting a bit behind :) )
To load dynamic routes in Drupal, we need to throw an event. In that event, different modules (i.e. listeners) will basically return the routes they need registered. This is the "info" hook (but that name isn't really important for us understanding the flow). THEN, another event would be thrown. This time, the full aggregate RouteCollection that was built by all the listeners in the first event is passed around to these listeners. The purpose is that listeners can now mutate that RouteCollection. This is the "alter" hook. Two events are thrown so that anyone who needs to alter routes is guaranteed to have all of them loaded already by the time they are notified as a listener. I *think* (and Larry - yell if I'm wrong - at least I'll have clarified in my misunderstanding!) the question comes to this: is there a spot in the Symfony world where we have a pattern that is similar to this (i.e. where we throw 2 events in a row - 1 to collect all the information and another to allow that information to be mutated)? I personally don't know of one - the only analogous area is the (a) building of the container and then (b) compiler passes. So for me, the 2 events seem very non-traditional, but I also can't think of another way to do this. Cheers! Ryan Weaver US Office Head & Trainer - KnpLabs - Nashville, TN http://www.knplabs.com <http://www.knplabs.com/en> http://knpuniversity.com Twitter: @weaverryan On Wed, Nov 7, 2012 at 6:37 PM, Thomas Rabaix <tho...@rabaix.net> wrote: > Larry, > > Can you explain the use cases for such hooks? Most of computation should > be done while the DIC is being built so on a standard request no important > computation is done. > > So if my understanding is good, the DIC should contains all configurations > and hooks must be replaced by an Events to only alter the targeted data > (ie, the node, the form ...) based on services definitions. > > The "tell me about yourself" must be done when the container is built by > using mechanism from the Dependency Injection Component. Now, I don't know > the current implementation in Drupal, but in Symfony2 (the full stack > framework), there is no "information" metadata where a bundle can register > or provide information about what features a bundle implements. > > > > > > On Wed, Nov 7, 2012 at 5:20 PM, Larry Garfield <la...@garfieldtech.com>wrote: > >> Hi Bernhard. >> >> I'm not sure I follow. With both GetResponseEvent and PostResponseEvent, >> I can retrieve the request/response objects. Because of the way objects >> pass in PHP, both are mutable in practice. >> >> When I say "info" hooks/events, I don't mean notification events. I mean >> "tell me about yourself" data-collection events. For the specific case at >> hand, it would be asking all modules to return a RouteCollection (or in >> other cases an array of objects, or array of arrays), and then deliberately >> allowing other modules to modify that RouteCollection rather than passing >> an event that implicitly allows the collection to be modified by virtue of >> PHP's object passing semantics. >> >> It's certainly possible that I'm over thinking this, but I know I'm going >> to be asked to establish an easy pattern (because Drupal is like that), so >> I want to make sure it's a Symfony-friendly pattern. >> >> --Larry Garfield >> >> >> On 11/7/12 5:16 AM, Bernhard Schussek wrote: >> >>> Hi Larry, >>> >>> Currently, Symfony distinguishes between these sorts of events as you >>> said, by providing mutable or immutable event objects. If an event >>> object is immutable, the event is clearly an "info" event. If the event >>> object is mutable, it would be an "alter" event. >>> >>> For example, GetResponseEvent [1] in HttpKernel is an "alter" event, >>> while PostResponseEvent [2] is an "info" event. >>> >>> I don't think you need a more sophisticated pattern than that. >>> >>> Cheers, >>> Bernhard >>> >>> [1] >>> https://github.com/symfony/**symfony/blob/master/src/** >>> Symfony/Component/HttpKernel/**Event/GetResponseEvent.php<https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Event/GetResponseEvent.php> >>> [2] >>> https://github.com/symfony/**symfony/blob/master/src/** >>> Symfony/Component/HttpKernel/**Event/PostResponseEvent.php<https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Event/PostResponseEvent.php> >>> >>> -- >>> If you want to report a vulnerability issue on symfony, please send it >>> to security at symfony-project.com >>> >>> You received this message because you are subscribed to the Google >>> Groups "symfony developers" group. >>> To post to this group, send email to symfony-devs@googlegroups.com >>> To unsubscribe from this group, send email to >>> symfony-devs+unsubscribe@**googlegroups.com<symfony-devs%2bunsubscr...@googlegroups.com> >>> For more options, visit this group at >>> http://groups.google.com/**group/symfony-devs?hl=en<http://groups.google.com/group/symfony-devs?hl=en> >>> >> >> -- >> If you want to report a vulnerability issue on symfony, please send it to >> security at symfony-project.com >> >> You received this message because you are subscribed to the Google >> Groups "symfony developers" group. >> To post to this group, send email to symfony-devs@googlegroups.com >> To unsubscribe from this group, send email to >> symfony-devs+unsubscribe@**googlegroups.com<symfony-devs%2bunsubscr...@googlegroups.com> >> For more options, visit this group at >> http://groups.google.com/**group/symfony-devs?hl=en<http://groups.google.com/group/symfony-devs?hl=en> >> > > > > -- > Thomas Rabaix > http://rabaix.net | http://sonata-project.org > > -- > If you want to report a vulnerability issue on symfony, please send it to > security at symfony-project.com > > You received this message because you are subscribed to the Google > Groups "symfony developers" group. > To post to this group, send email to symfony-devs@googlegroups.com > To unsubscribe from this group, send email to > symfony-devs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/symfony-devs?hl=en > -- If you want to report a vulnerability issue on symfony, please send it to security at symfony-project.com You received this message because you are subscribed to the Google Groups "symfony developers" group. To post to this group, send email to symfony-devs@googlegroups.com To unsubscribe from this group, send email to symfony-devs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-devs?hl=en