假设我有一个包含大量字段的HTML表单。有些字段属于Product,有些属于Order,有些属于Other。提交表单时,我想接受该请求,然后在控制器中为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甚至可以做到这一点,我该怎么做呢?
答案 0 :(得分:2)
您需要禁用CSRF令牌以手动绑定数据。
为此,您可以在创建表单对象时传递csrf_protection
选项。
像这样:
$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product, array(
'csrf_protection' => false
));
答案 1 :(得分:0)
我觉得您可能需要一个嵌入其他表单的表单:
// Main form
$builder
->add('product', new ProductType)
->add('order', new OrderType);
并且有一个对象,该对象包含与您绑定到请求的其他对象的关联。就像这样你只需要将一个对象与请求绑定,并通过简单的getter访问嵌入对象。
我清楚了吗?