1

セッション データをフォームに取り込もうとしていますが、方法がわかりません。

FormType のコンストラクターに渡すこともできますが、実際にセッションを使用する FormType は、メイン フォームの3 レベル深くネストされています。したがって、次のように各フォームタイプの各コンストラクターでセッションオブジェクトを渡すのは汚いと思います:

->add('name', new NestedFormType($this->session))

また、formsType をサービスとして使用することも考えました。したがって、セッションで注入する必要があるformsTypeごとに親が必要です。

しかし、すべてのフォームをサービスとして定義せずに、どうすればそれを行うことができますか?

DICさらに、 FormTypesの内部にアクセスできません。そのため、最初の formType オブジェクト ( にアクセスできるコントローラーで作成される) の作成はDIC問題ありませんが、ネストされた FormTypes を親からインスタンス化することはできません。

きれいな解決策はありますか?

4

2 に答える 2

1

この親フォームをサービスとして定義し、セッションを引数として渡す必要があります。

この質問を見てください: Symfony2 でフォームをサービスとして作成する

于 2012-12-13T20:02:58.270 に答える
0

内部の挿入されたフォームタイプをそのエイリアスで参照する限り、上位レベルのフォームタイプのサービスを定義する必要はありません。

NestedFormTypeサービス定義:

nested.form.type:
    class: Type\NestedFormType
    tags:
        - { name: form.type, alias: nested_form }
    arguments: [ @security.context ]

NestedFormType:

class NestedFormType extends AbstractType
{
    private $security_context;

    public function __construct($security_context)
    {
        $this->security_context = $security_context;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // do something with $this->security_context
    }

    public function getName()
    {
        return 'nested_form';
    }
}

ParentFormType:

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('name', 'nested_form'); 
    // 'nested_form' matches service definition and NestedFormType::getName()
}
于 2013-03-22T23:43:02.847 に答える