1. ホーム
  2. php

[解決済み] symfony 2.8, 3.0 以降の buildForm() へのデータの渡し方

2023-05-08 09:22:46

質問

私のアプリケーションでは、現在、コンストラクタを使用してフォームタイプにデータを渡しています。 この回答 . しかし symfony 2.8 アップグレードガイド に型のインスタンスを渡すことを助言しています。 createForm 関数に渡すことは非推奨であることを助言します。

Form::add(), FormBuilder::add(), and the API に型インスタンスを渡すことは非推奨です。 FormFactory::create*() メソッドに型インスタンスを渡すことは非推奨で、Symfony 3.0 ではサポートされません。 メソッドは非推奨で、Symfony 3.0 ではサポートされません。の完全修飾クラス名を渡してください。 型の完全修飾クラス名を渡してください。

Before:    
$form = $this->createForm(new MyType());

After:
$form = $this->createForm(MyType::class);

完全修飾されたクラス名でデータを渡すことができないので、代替手段はないのでしょうか?

どのように解決するのですか?

これは、私たちのフォームの一部も壊しました。私は、カスタム データをオプション リゾルバに渡すことで解決しました。

フォームのタイプで

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $this->traitChoices = $options['trait_choices'];

    $builder
        ...
        ->add('figure_type', ChoiceType::class, [
            'choices' => $this->traitChoices,
        ])
        ...
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'trait_choices' => null,
    ]);
}

そして、コントローラでフォームを作成する際に、コンストラクタではなくオプションとして渡します。

$form = $this->createForm(ProfileEditType::class, $profile, [
    'trait_choices' => $traitChoices,
]);