🎻

[Symfony/Form] FormTypeに別のFormTypeの特定のフィールドだけを取り込む方法

2020/07/31に公開

小ネタです。

あるFormTypeの中の特定のフィールドを、別のFormTypeにフィールドとして取り込んでaddする方法を説明します。

例えば以下のようなFormTypeがあるとします。

class ProfileType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class)
            ->add('nickname', TextType::class)
            ->add('birthday', DateType::class)
        ;
    }
}

このFormTypeのうちの birthday フィールドだけを別のFormTypeで使い回したい場合は、以下のようにすれば実現できます。

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username', TextType::class)
            ->add('email', EmailType::class)
            ->add($builder->create('', ProfileType::class)->get('birthday'), [
                // options
            ])
        ;
    }
}

この例だとシンプルすぎてわざわざ使い回す意味がほとんどないですが、いつかもっと複雑なFormTypeを作っていてやりたくなったときに思い出していただければ幸いです😇

GitHubで編集を提案

Discussion