フィールドが作成された後、選択フィールドの可能なオプションを編集できますか?
たとえば、選択フィールド (カテゴリのドロップダウン ボックス) の可能なオプションは、私のデータベースから取得されます。私のコントローラーは次のようになります。
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())
);
}