2013-12-10 5 views
5

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

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

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); 
    ... 
} 
+0

насчет только настройки свойств объекта животного? –

ответ

6

Вы должны загрузить объект животного, которое вы Вана обновить. 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). Вы можете изучить идею и способ обращения с такими типами запросов.

1

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

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

Смежные вопросы