我有一系列 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表单,但要想办法让它验证。