Est-ce que Symfony2 peut former un écouteur d'événement pour accéder au conteneur de service et comment?
Comme par titre, un formulaire Symfony2 écouteur d'événement accéder au conteneur de services?
Ceci est un exemple de l'écouteur d'événement (pour le poste de liaison de l'événement):
class CustomerTypeSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(FormEvents::POST_BIND => 'onPostBind');
}
public function onPostBind(DataEvent $event)
{
//Get the entity (Customer type)
$data = $event->getData();
//Get current user
$user = null;
//Remove country if address is not provided
if(!$data->getAddress()) :
$data->setCountry(null);
endif;
}
}
source d'informationauteur gremo
Vous devez vous connecter pour publier un commentaire.
Quoi avez-vous besoin d'accéder à service de conteneur?
Vous pouvez injecter tous les services dans votre écouteur à l'aide de l'injection de dépendance (que vous définissez votre écoute comme un service, non?).
Vous devriez être en mesure de faire quelque chose comme:
Et dans votre auditeur:
Où someService est l'ID de n'importe quel service que vous voulez injecter.
Si vous le souhaitez, vous pouvez injecter le conteneur de services avec @service_container, mais c'est probablement mieux d'injecter uniquement ce dont vous avez besoin parce que je pense avoir tout conteneur conscience vous rend un peu paresseux.
Je pense que la façon dont une Forme d'Abonné est un peu différent à la régularité de l'Écouteur d'Événement.
Dans votre contrôleur, vous êtes l'instanciation de votre type de formulaire, c'est à dire
Depuis le conteneur est disponible dans votre contrôleur, vous pouvez passer directement à votre type de formulaire, c'est à dire
Dans mon cas, j'ai besoin du contexte de sécurité, de sorte que mes de mise en œuvre (de façon similaire, mais légèrement différente de l'original de votre q):
Dans mon controller:
Dans ma classe de Formulaire:
Et dans mon Formulaire Abonné
Espère que cela aide.