web-dev-qa-db-ja.com

Symfony2-エンティティがアタッチされていないフォームビルダーの使用

私はSymfony2でフォームビルダーを使用してきましたが、非常に便利です。検索結果をフィルタリングするために、上部に一連のボックスを含む検索ページを作成したいと思っています。現在、3つの異なるエンティティ(裁判官、通訳、弁護士)がいます。ユーザーが部分的または完全な名前を入力し、すべてのエンティティを検索できるようにしたいと思います。実際の検索部分は処理できますが、フォームビルダーの生成が問題を引き起こしています。

私がやろうとしているのは、特定のエンティティに関連付けられていないフォームを作成することです。 Symfonyサイトで読んだすべてのチュートリアルとドキュメントは、デフォルトでエンティティに添付されるように機能します。エンティティに添付し、各テキストフィールドをmapped = falseに設定する必要があるのか​​、これがフォームを自分でハードコーディングする必要があるインスタンスであるのか、フォームビルダー内でこれを行う方法があるのか。

41
Josh Wa

FormTypeを使用しないでください。FormBuilderを使用するためにエンティティをアタッチする必要はありません。代わりに配列を使用してください。おそらくSymfonyのドキュメントのこの小さなセクションを見落としているでしょう: http://symfony.com/doc/current/form/without_class.html

<?php
// inside your controller ...
$data = array();

$form = $this->createFormBuilder($data)
    ->add('query', 'text')
    ->add('category', 'choice',
        array('choices' => array(
            'judges'   => 'Judges',
            'interpreters' => 'Interpreters',
            'attorneys'   => 'Attorneys',
        )))
    ->getForm();

if ($request->isMethod('POST')) {
    $form->handleRequest($request);

    // $data is a simply array with your form fields 
    // like "query" and "category" as defined above.
    $data = $form->getData();
}
79
lifo

createNamedBuilderメソッドを使用してフォームを作成することもできます

$form = $this->get('form.factory')->createNamedBuilder('form', 'form')
            ->setMethod('POST')
            ->setAction($this->generateUrl('upload'))
            ->add('attachment', 'file')
            ->add('save', 'submit', ['label' => 'Upload'])
            ->getForm();
7
Farid Movsumov