Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collections 如何动态添加';s在Symfony2表单类型的集合中的集合_Collections_Symfony - Fatal编程技术网

Collections 如何动态添加';s在Symfony2表单类型的集合中的集合

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 $

我在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 $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
    );