暂时假设此表单使用来自Animal
的虚构ZooCollection
文档对象类,symfony2中只有两个属性(“name”和“color”)。< / p>
我正在寻找工作简单的愚蠢解决方案,使用给定对象 auto预填充 表单字段 -magically (例如,更新?)。
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 :(得分:7)
您应该加载要更新的动物对象。 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控制台命令(doctrine:generate:crud)生成的代码中学习总是一个好主意。您可以了解这个想法以及处理此类请求的方式。
答案 1 :(得分:1)
使用对象创建表单是最好的方法(请参阅@ dtengeri的回答)。但你也可以将$form->setData()
与关联数组一起使用,这听起来就像你要求的那样。如果不使用ORM,或者只需要更改表单数据的子集,这将非常有用。
大量问题是表单构建器中的任何默认值 都不会被setData()
覆盖。这是违反直觉的,但它是Symfony如何运作的。讨论: