🎻
[Symfony/Form] FormTypeに別のFormTypeの特定のフィールドだけを取り込む方法
小ネタです。
ある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を作っていてやりたくなったときに思い出していただければ幸いです😇
Discussion