Symfony フォーム - 子エントリ内のエンティティにアクセスする CollectionType に入力する 質問する

Symfony フォーム - 子エントリ内のエンティティにアクセスする CollectionType に入力する 質問する

CollectionType親の内部にある特定の埋め込みフォームのエンティティにアクセスしようとしていますFormBuilder:

親タイプ

Class ParentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('children', CollectionType::class, array(
            'entry_type' => ChildType::class
        );
    }
}

子タイプ

class ChildType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $child = $builder->getData(); // this returns null
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'Vendor\Bundle\Entity\Child',
        );
    }
}

これは通常の形式では機能しますが、$childnull として返されます。Child内部のエンティティにアクセスするにはどうすればよいでしょうかChildType?

ベストアンサー1

答えはイベントリスナーイベントをリッスンしますPRE_SET_DATA

FormEventフォームとそれにバインドされているデータの両方を含むクラスがクロージャに渡されます。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addEventListener(FormEvents::PRE_SET_DATA,
        function (FormEvent $event) use ($builder)
        {
            $form = $event->getForm();
            $child = $event->getData();

            if ($child instanceof Child) {

                // Do what ever you like with $child entity data

            }
        }
    );
}

おすすめ記事