私のアプリケーションのすべてのフォームにカスタムイベントサブスクライバを関連付けようとしています。 Symfony2:サービスコンテナのフォームイベントサブスクライバのインスタンス化
は、私はそのbuildForm
機能
public function buildForm(FormBuilderInterface $builder, array $options)
{
// code here
->addEventSubscriber(new \AppBundle\EventListener\FormListener());
}
内のフォームにそれを関連付けることができます知っているイベント加入者クラス
<?php
namespace AppBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
/**
* Custom form listener.
*/
class FormListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
FormEvents::PRE_SUBMIT => 'onPreSubmit',
FormEvents::SUBMIT => 'onSubmit',
FormEvents::POST_SUBMIT => 'onPostSubmit',
FormEvents::PRE_SET_DATA => 'onPreSetData',
FormEvents::POST_SET_DATA => 'onPostSetData',
);
}
public function onPreSubmit(FormEvent $event)
{
// code here
}
public function onSubmit(FormEvent $event)
{
// code here
}
public function onPostSubmit(FormEvent $event)
{
// code here
}
public function onPreSetData(FormEvent $event)
{
// code here
}
public function onPostSetData(FormEvent $event)
{
// code here
}
}
を作成することによって開始し、すべてのものは、これまで正常に動作します。
これは私のアプリケーションのすべてのフォームにこのイベントデジグネータを追加したいので(共通のチェックを行い、フォーム操作のフックを提供するため)、私はイベントのサブスクライバを各フォーム内でインスタンス化しないと思っていました。しかし、このような(services.yml中)サービスコンテナ内:回答
appbundle.form.listener:
class: AppBundle\EventListener\FormListener
tags:
- { name: kernel.event_subscriber }
言うまでもなく、この第2のアプローチは機能していません。だから私の質問です:私は何か間違っている?フォームイベントに耳を傾けることが可能です外フォーム?私のアプローチに何か問題がありますか?