Open1
[symfony/Form] Formクラス内で、別フィールドの値を受け取る方法に関する考え
環境
Symfony6, 6.4
UX Live Component を含む
概要
Formクラスで追加の値を持たせたい事がある。次の例では_key
という追加のフィールドを設定している。
class LifeActivityLogFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$entity = $options['data'] ?? null;
$builder
->add('name', TextType::class, [
'empty_data' => '',
])
->add('has_checked', CheckboxType::class, [
'required' => false,
'label' => false,
])
->add('life_activity_category', EntityType::class, [
'label' => 'カテゴリ',
'class' => LifeActivityCategory::class,
'empty_data' => '1',
])
->add('_key', HiddenType::class, [
'data' => (empty($entity) ? null : $entity->getCode()),
'mapped' => false,
])
;
}
}
なぜこんな事してるのかというと、View側(テンプレート)で追加したデータにアクセスしたいから。上記の様に _key
を追加すると、次のようにして値にアクセス出来る。
{{ form._key.vars.value }}
上記の様にしてFormクラスから値を取りたい場面というのは限られていると思う。というのも、Formクラス経由で値を取るんじゃなくて、コントローラ内でtwigに値を渡す事で済むことが多い。私は次の場面でFormクラス経由で値を取る必要があった
- Formのビューが複数ある場合。配列にフォームを入れて、それをtwigの方でループさせて表示させるとき
- Formクラスに別のFormクラスを埋め込んで、それをtwigの方でループさせて表示させる