Symfony2 Form заполнить поля данными

Предположим на мгновение, что эта форма использует воображаемый объект объекта документа Animal из ZooCollection который имеет только два свойства («имя» и «цвет») в symfony2 .

Я ищу рабочее простое глупое решение , чтобы заранее заполнить поля формы заданным объектом автоматически (например, для обновлений?).

Acme/DemoBundle/Controller/CustomController :

 public function updateAnimalAction(Request $request) { ... // Create the form and handle the request $form = $this->createForm(AnimalType(), $animal); // Set the data again << doesn't work ? $form->setData($form->getData()); $form->handleRequest($request); ... } 

Вы должны загрузить объект животного, который вы хотите обновить. createForm () будет использовать загруженный объект для заполнения поля в вашей форме.

Предполагая, что вы используете аннотации для определения ваших маршрутов:

 /** * @Route("/animal/{animal}") * @Method("PUT") */ public function updateAnimalAction(Request $request, Animal $animal) { $form = $this->createForm(AnimalType(), $animal, array( 'method' => 'PUT', // You have to specify the method, if you are using PUT // method otherwise handleRequest() can't // process your request. )); $form->handleRequest($request); if ($form->isValid()) { ... } ... } 

Я считаю, что всегда полезно учиться на коде, создаваемом командами Symfony и доктрины консоли ( doctrine: generate: crud ). Вы можете изучить идею и способ обращения с такими типами запросов.

Создание формы с использованием объекта – лучший подход (см. Ответ @ dtengeri). Но вы также можете использовать $form->setData() с ассоциативным массивом, и это похоже на то, о чем вы просили. Это полезно, если вы не используете ORM, или просто вам нужно изменить подмножество данных формы.

Массивный вопрос заключается в том, что любые значения по умолчанию в вашем построителе форм не будут переопределены setData() . Это противоречит интуиции, но так работает Symfony. Обсуждение: