2017-04-03 6 views
0

Voici mon service.yml:auditeur Symfony commencer après extensions Twig lors du premier lancement

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 } 

Mon auditeur commence toujours avant mes extensions de brindille et il est bon, mais pas juste après le cache ... clair Mon L'application plante toujours la première fois (après avoir effacé le cache ou changé les paramètres) parce que mon extension de twig doit avoir un objet déjà hydraté par l'auditeur. Donc, si ça commence avant, planter normalement :(

1/Quel est le problème?

2/comment puis-je forcer mon auditeur à toujours commencer avant l'extension de brindille?

Toutes les suggestions seront les bienvenus

+0

Vous ne pouvez pas. Les extensions Twig seront toujours créées avant l'appel des auditeurs. Ce que vous devez faire est d'obtenir votre objet lorsque le filtre de brindille ou la fonction est appelée. – Cerad

+0

Mais ... Juste la première fois après avoir effacé le cache ??? – rudak

+0

Vous interprétez mal votre conclusion sur la suppression du cache. Je suppose que les résultats de MyListener :: createFooObject finit dans votre extension? Peut-être poster un peu plus de code et peut-être que nous pouvons voir exactement ce qui se passe. – Cerad

Répondre

0

Event listeners page lit:

L'autre attribut de balise option est appelée priority, qui par défaut et il contrôle l'ordre dans lequel les écouteurs sont exécutés (plus la priorité est élevée, plus tôt un écouteur est exécuté). Ceci est utile lorsque vous devez garantir qu'un écouteur est exécuté avant un autre. Les priorités des écouteurs Symfony internes vont généralement de -255 à 255 mais vos propres auditeurs peuvent utiliser n'importe quel entier positif ou négatif.

Liste vos auditeurs et leurs priorités avec la commande:

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

et attribuer priority approprié comme ci-dessous. Mettre à jour priority: 0. Si vous ne le définissez pas du tout, la valeur par défaut est 0.

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

Le problème est bien sûr que les extensions twig ne sont pas des écouteurs. – Cerad