2

複数のエンティティのいくつかのフィールドを使用してフォームを作成したいと思います。必要なすべての個別のエンティティがすでに作成されており、フォームクラスを使用していません。フォームをレンダリングしてそのデータを処理し、データベースの正しいテーブルに保存できるようにする方法を知る必要があります。

これが私のコントローラーの一部です。

public function createPublicSpaceAction() {
    //My entities
    $Room = new Room();
    $GuestList = new GuestList();
    $Guest = new Guest();

    //I need to know what to do from here

    return $this -> render('AcmeUserBundle:Default:Forms/createPublicSpace.html.twig', array());
}

私は解決策を見つけようとし続け、1つのフォームには1つのエンティティが必要であるという考えを思いつきました。したがって、解決策は、これらのエンティティを1つにマージして、フォームを簡単に作成できるようにすることです。次に、対応するテーブルにデータを永続化する必要があります。しかし、私はエンティティをマージする方法を考えることができません。

4

2 に答える 2

2

私は一時的な解決策を見つけました。知りたい人のために、私は必要なすべてのエンティティのマージのように見えるエンティティを手動で作成しました。この新しいエンティティはDoctrineとリンクしていないため、テーブルを作成できません。その目標は、単にフォームを作成し、そのフォームを介してデータを操作できるようにすることです。次に、対応するエンティティフィールドに送信されたすべてのデータを割り当て、データベースに永続化します。

もう一度、これが最善の解決策ではないことを私は知っています。しかし、いくつかの理由で私は言いません、それは現時点で私のためです。これが私と同じ状況にある人たちに役立つことを願っています。それを行うのに役立つリンクやより良い方法を投稿することを躊躇しないでください。

于 2012-09-26T10:02:49.043 に答える
1

フォームクラスを使用することを強くお勧めしますhttp://symfony.com/doc/current/book/forms.html#creating-form-classes

それらは時間を節約し、多くのことを簡単にするように設計されています。

ただし、質問に答えるには、次のことを考慮してください。アクションはPOSTリクエストを処理する必要があります。したがって、投稿データを使用してリクエストオブジェクトをキャッチします。

use Symfony\Component\HttpFoundation\Request;

public function createPublicSpaceAction(Request $request)

次に、フォームビルダーのインスタンスを取得し、フォームを作成します。

$builder = $this->createFormBuilder();

$builder->add('floor', 'text', array(
        'label' => 'Room floor',
        'data' => $room->getFloor()
));

必要な数のフォームフィールドを追加します。いくつかの組み込みフィールドタイプがあります:http ://symfony.com/doc/current/book/forms.html#built-in-field-types

フォームを作成します。

$form = $builder->getForm();

フォームをテンプレートに渡します。

return $this -> render('AcmeUserBundle:Default:Forms/
                        createPublicSpace.html.twig', array(
    'roomForm' = $form
));

アクション内で投稿されたデータを取得するには:

if ('POST' == $request->getMethod()) {
    $data = $request->request->get("form");
}

テンプレートでは、フォームを自分でレンダリングするか、twigに任せることができます。

{{ form_widget(form.floor)}}

したがって、これは言及するのに最も重要なことです。ただし、http://symfony.com/doc/current/book/forms.htmlを確認する必要があります。実際には、私が書き留めたすべてのことを教えてくれます。

幸運を ;)

于 2012-09-25T13:38:34.077 に答える