Yep, that's exactly right, Ryan. :-) (We'll make a Drupal dev out of you yet...)

I agree that many "tell me about yourself" operations belong in the DIC, now that we have that, but not all can go there. For instance, many routes will be based off of user configuration, by design, and those can't be regenerated from the DIC in a cleanly injected fashion (as far as I'm aware, anyway). (Besides, putting Routes into the DIC seems even weirder.)

The question was "is there a better or more Symfonic way to do it than a double event"? It looks like the answer is "eh, not really". So, we'll stick with that for now until someone comes up with something better. :-)

--Larry Garfield

On 11/8/12 8:15 AM, ryan weaver wrote:
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
<mailto: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 <mailto: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 <http://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
            <mailto:symfony-devs@googlegroups.com>
            To unsubscribe from this group, send email to
            symfony-devs+unsubscribe@__googlegroups.com
            <mailto: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
        <http://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 <mailto:symfony-devs@googlegroups.com>
        To unsubscribe from this group, send email to
        symfony-devs+unsubscribe@__googlegroups.com
        <mailto: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 <http://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
    <mailto:symfony-devs@googlegroups.com>
    To unsubscribe from this group, send email to
    symfony-devs+unsubscr...@googlegroups.com
    <mailto:symfony-devs%2bunsubscr...@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

--
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

Reply via email to