2017-04-03 7 views
0

Hier ist meine service.yml:Symfony Zuhörer nach Twig Erweiterungen beim ersten Start beginnt

services: 
foo.builder: 
    class: MyBundle\Core\MyClass 

foo.twig_extension: 
    class: MyBundle\Twig\BarExtension 
    arguments: ['@foo.builder'] 
    tags: 
     - { name: twig.extension } 

foo.listener.foolistener: 
    class: MyBundle\EventListener\MyListener 
    arguments: ['@service_container'] 
    tags: 
    - { name: kernel.event_listener, event: kernel.controller, method: createFooObject } 

Mein Zuhörer vor meinem Zweig Erweiterungen beginnt immer und es ist gut, aber nicht nur nach dem Cache leeren ... My App stürzt immer beim ersten Mal ab (nachdem der Cache geleert wurde oder die Parameter geändert wurden), da meine Zweig-Erweiterung ein Objekt haben muss, das bereits vom Listener hydratisiert wurde. Also, wenn es vor dem Start, zum Absturz bringt es normalerweise :(

1/was ist das Problem?

2/wie kann ich meine Zuhörer immer vor Zweig Erweiterung zu beginnen zwingen?

Alle Vorschläge sind willkommen

+0

Sie können nicht. Twig-Erweiterungen werden immer erstellt, bevor die Listener aufgerufen werden. Was Sie tun müssen, ist, Ihr Objekt zu erhalten, wenn der Zweigfilter oder die Funktion aufgerufen wird. – Cerad

+0

Aber ... Nur das erste Mal nach dem Löschen des Caches ??? – rudak

+0

Sie interpretieren Ihre Schlussfolgerung zum Cache-Clearing falsch. Ich nehme an, dass die Ergebnisse von MyListener :: createFooObject in Ihrer Erweiterung landen? Vielleicht poste ein bisschen mehr Code und vielleicht können wir genau sehen, was vor sich geht. – Cerad

Antwort

0

Event listeners Seite lautet:

Das andere optionale Tag-Attribut priority genannt wird, der standardmäßig auf und es steuert die Reihenfolge, in der Listener ausgeführt werden (die höchste Priorität, je früher ein Listener ausgeführt wird). Dies ist nützlich, wenn Sie sicherstellen müssen, dass ein Listener vor einem anderen ausgeführt wird. Die Prioritäten der internen Symfony-Listener reichen normalerweise von -255 bis 255, aber Ihre eigenen Listener können jede positive oder negative Ganzzahl verwenden.

Liste Ihre Zuhörer und ihre Prioritäten mit dem Befehl:

php app(or bin)/console debug:event-dispatcher 

und entsprechende priority, um es wie unten zuordnen. Aktualisieren Sie priority: 0. Wenn Sie es überhaupt nicht festlegen, wird der Prioritätswert standardmäßig auf 0 gesetzt.

- { name: kernel.whatever, event: kernel.whatever, method: whatever, priority: 0 } 
+0

Problem ist natürlich, dass Zweig Erweiterungen sind keine Zuhörer. – Cerad

Verwandte Themen