2

フィールドが作成された後、選択フィールドの可能なオプションを編集できますか?

たとえば、選択フィールド (カテゴリのドロップダウン ボックス) の可能なオプションは、私のデータベースから取得されます。私のコントローラーは次のようになります。

public function addAction(Request $request){
    //get the form
            $categories = $this->service->getDataFromDatabase();
    $form = $this->formFactory->create(new CategoryType(), $categories);

    $form->handleRequest($request);
    if ($form->isValid()) {
        // perform some action, such as saving the task to the database, redirect

    }

    return $this->templating->renderResponse('TestAdminBundle:Categories:add.html.twig', 
        array('form' => $form->createView())
    );      
}

これは機能します。$categories はドロップダウン ボックスとして入力されるため、ユーザーはカテゴリを選択できます。このコードで気に入らないのは、ユーザーが送信を押してフォームが入力を検証するときに、「getDataFromDatabase」サービスを再度ヒットする必要があることです。これは私には不必要だと感じます。理想的には、検証が失敗し、ユーザーのためにフォームを再生成する必要がある場合にのみサービスをヒットする必要があります。コントローラーを次のようにしたいと考えています。

public function addAction(Request $request){
    //get the form
    $form = $this->formFactory->create(new CategoryType());

    $form->handleRequest($request);
    if ($form->isValid()) {
        // perform some action, such as saving the task to the database, redirect

    }

            $categories = $this->service->getDataFromDatabase();
            $form->setData($categories); //this tells the choice field to use $categories to populate the options

    return $this->templating->renderResponse('TestAdminBundle:Categories:add.html.twig', 
        array('form' => $form->createView())
    );      
}
4

1 に答える 1

0

EventSubscriber を使用する必要があります。こちらのドキュメントを確認してください: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-underlying-data

于 2013-10-28T19:02:13.583 に答える