CollectionType表单验证 - “CSRF令牌无效”和“不应包含额外字段”

时间:2013-10-10 13:47:18

标签: symfony

我有一系列 POSProduct 实体,我想为每个实体显示一个表单,因此用户可以编辑并保存他们想要的列表。以前我在迭代数组并为每个数组构建一个 POSProductType 表单,并将表单数组发送到twig模板。

我被多个人告知我应该使用Collection而不是这种技术。我无法找到真正涵盖此用例的任何示例,但有人建议我直接从我的控制器构建表单并使用内置的CollectionType表单,如下所示:

    $arrayProducts = return_array_of_product_entities();
    $form = $this->createForm('collection', $arrayProducts, array(  'type' => 'pos_product',
                                                'csrf_protection' => true,
                                                'intention' => 'vendor_add',
                                                'allow_add' => true,
                                                            ));
    return $this->render('MyBundle:Default:myform.html.twig', array(
        'form' => $form->createView(),
    ));

* type => pos_product *是我在其自己的类中定义的POSProductType表单。

表单呈现正常,但是当我提交并验证时,我收到两个错误:

CSRF令牌无效。请尝试重新提交表单/ 此表单不应包含额外字段

当我查看表单的来源时,会出现CSRF令牌。我已经尝试了createForm()中 csrf_protection 意图 allow_add 选项的所有组合,结果始终相同。

我也尝试制作自己的ProductCollectionType表单类,所以我不必使用默认的CollectionType,但我真的不明白我需要的语法。我正在尝试这样的事情:

$builder->add('pos_product', 'collection', array(
            'type' => new POSProduct()));

(我可以想到第一个和第三个参数的每个组合),它只会产生一个带有“posproduct”标签的表单

我的解决方案首选项是如何创建我自己的ProductCollectionType类,该类将呈现POSProduct()实体数组,每个实体都以'pos_product'类型的形式表示

我的备份解决方案是继续使用我目前拥有的相同CollectionType表单,但要想办法让它验证。

0 个答案:

没有答案