Collections 如何动态添加';s在Symfony2表单类型的集合中的集合
我在symfony2中有3种表单类型 FaultType,它是所有下一个集合的父级Collections 如何动态添加';s在Symfony2表单类型的集合中的集合,collections,symfony,Collections,Symfony,我在symfony2中有3种表单类型 FaultType,它是所有下一个集合的父级 <?php namespace My\FaultBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class FaultType extends AbstractType { public function buildForm(FormBuilder $
<?php
namespace My\FaultBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class FaultType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('title')
->add('steps', 'collection', array(
'type' => new StepType(),
'allow_add' => true,
'prototype' => true,
'by_reference' => false,
))
->add('created')
->add('updated')
;
}
public function getDefaultOptions()
{
return array(
'data_class' => 'My\FaultBundle\Entity\Fault'
);
}
public function getName()
{
return 'my_fault_fault';
}
}
您必须制作自己的原型
有两种解决方案:
用正则表达式查找属性路径的所有数字段
,并用占位符替换它们
$segments_found = preg_match('/\[(\d+)\]/', $prototype, $matches);
使用递归查找顶级集合父级,并从中手动生成路径
你试过重新订购物品吗?这完全是一场灾难;) 我制作了一个JS代码片段,可以在这里提供帮助。只需添加两个按钮[添加新按钮,删除最后一个按钮]。
它可以处理递归/嵌套原型。
它与一个中介(与Symfony事件调度器相同)相结合,允许您将生成的控件绑定到事件。如果不需要中介,请删除以下行:
docdigital.mediatorInstance.send(
docdigital.constants.mediator.messages.clonePrototype_prototypeAdded,
$clone
);
请考虑将相关内容添加到答案中。见:
$segments_found = preg_match('/\[(\d+)\]/', $prototype, $matches);
docdigital.mediatorInstance.send(
docdigital.constants.mediator.messages.clonePrototype_prototypeAdded,
$clone
);