2
私はチュートリアルHow to Dynamically Generate Forms Using Form Eventsに従っています。私はAddNameFieldSubscriber
の作成にこだわっている:symfony2の(フォームイベントの)サブスクライバからのフォームフィールドへのアクセス
$subscriber = new AddNameFieldSubscriber($builder->getFormFactory());
私の質問は簡単です:FormFactory
が以前$builder
によって作成された任意のフォームフィールドにアクセスして変更することができますか?なぜ$builder
の代わりにFormFactory
を渡しているのですか? 加入者に私はrequired = false
(単なる例)を設定したいと思い
class ProductType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$subscriber = new AddProductTypeSubscriber($builder->getFormFactory());
$builder->addEventSubscriber($subscriber);
$builder->add('name');
$builder->add('price');
}
public function getName() { return 'product'; }
}
:我々はビルダーでちょうど2つのフィールド(「名前」と「価格」)を持っていると仮定すると、
:
class ProductTypeSubscriber implements EventSubscriberInterface
{
private $factory;
public function __construct(FormFactoryInterface $factory)
{
$this->factory = $factory;
}
public static function getSubscribedEvents()
{
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(DataEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) return;
// Access "name" field and set require = false
}
}
も私の恐怖でした。私はさらに調査するつもりですが、私は正確に同じと思います... – Polmonino
あなたはこれを行う方法を見つけましたか? – d0001