5

假设我有一个包含一堆字段的 HTML 表单。一些字段属于产品,一些属于订单,一些属于其他。提交表单后,我想接受该请求,然后在控制器中为 Product、Order 和 Other 创建 Symfony 表单。然后我想获取部分表单数据并将其与适当的表单绑定。一个例子是这样的:

$productArray = array('name'=>$request->get('name'));
$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product);
$pf->bind($productArray);
if($pf->isValid()) {
  // submit product data
}

// Do same for Order (but use order data)

// Do same for Other (but use other data)

问题是当我尝试这样做时,我无法让 $form->isValid() 方法工作。似乎 bind() 步骤失败了。我怀疑它可能与表单令牌有关,但我不确定如何修复它。同样,我在视图中构建了自己的 HTML 表单(我没有使用 form_widget(),因为它需要以某种方式将一堆 FormTypes 合并为一个复杂的东西)。我只想要一种非常简单的方法来使用基本的 HTML 表单和 Symfony 表单功能集。

谁能告诉我 Symfony 甚至可以做到这一点,我该怎么做?

4

2 回答 2

2

您需要禁用 CSRF 令牌才能手动绑定数据。

为此,您可以csrf_protection在创建表单对象时传递该选项。

像这样:

$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product, array(
    'csrf_protection' => false
));
于 2013-04-16T19:43:07.077 回答
0

我觉得您可能需要一个嵌入其他表单的表单:

// Main form
$builder
    ->add('product', new ProductType)
    ->add('order', new OrderType);

并拥有一个包含与您绑定到请求的其他对象的关联的对象。就像这样,您只需将一个对象与请求绑定并通过简单的 getter 访问嵌入的对象。

我够清楚吗?

于 2013-08-09T13:30:46.977 回答