【问题标题】:Symfony2 Form pre-fill fields with dataSymfony2 表单用数据预填充字段
【发布时间】:2013-12-10 16:40:24
【问题描述】:

暂时假设此表单使用来自ZooCollection 的虚构Animal 文档对象类,该对象类在 中只有两个属性(“名称”和“颜色”)。

我正在寻找一个工作简单愚蠢的解决方案,用给定的对象预填充 表单字段 auto -神奇地(例如更新?)。

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

【问题讨论】:

  • 只设置动物对象的属性怎么样?

标签: symfony2 php forms symfony controller doctrine-mongodb


【解决方案1】:

您应该加载要更新的动物对象。 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) 中学习总是一个好主意。您可以了解处理此类请求的想法和方式。

【讨论】:

    【解决方案2】:

    使用对象创建表单是最好的方法(请参阅@dtengeri 的回答)。但是您也可以将$form-&gt;setData() 与关联数组一起使用,这听起来就像您所要求的。这在不使用 ORM 或只需要更改表单数据的子集时很有帮助。

    巨大的陷阱是表单构建器中的任何默认值都将不会setData() 覆盖。这是违反直觉的,但这就是 Symfony 的工作方式。讨论:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多