gpt4 book ai didi

collections - 如何在 Symfony2 表单类型的集合中动态添加集合

转载 作者:行者123 更新时间:2023-12-04 08:45:36 24 4
gpt4 key购买 nike

我在 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';
}

}

步骤类型:
<?php

namespace My\FaultBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class StepType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('body')
->add('photos', 'collection', array(
'type' => new PhotoType(),
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'by_reference' => false,
))
;
}

public function getDefaultOptions()
{
return array(
'data_class' => 'My\FaultBundle\Entity\Step'
);
}

public function getName()
{
return 'my_fault_step';
}
}

和最后一个 PhotoType:
<?php

namespace My\FaultBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class PhotoType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('name')
->add('description')
->add('filename')
;
}

public function getDefaultOptions()
{
return array(
'data_class' => 'My\FaultBundle\Entity\Photo'
);
}

public function getName()
{
return 'my_fault_photo';
}
}

我找到了优秀的文章 link关于原型(prototype),并且使用一个嵌套表单类型非常好,但是当我想让它与第三个嵌套平均 PhotoType 一起工作时我遇到了问题......照片在步骤的集合中,这是错误的集合......,如何使用此示例为步骤动态添加/删除照片...?

最佳答案

我制作了一个 JS 片段,可以在这里提供帮助。您只需添加两个按钮 [添加新的,删除最后一个]。
https://gist.github.com/juanmf/10483041

它可以处理递归/嵌套原型(prototype)。
它与允许您将生成的控件绑定(bind)到事件的中介(与 Symfony 事件调度程序相同)相结合。如果您不需要调解器,请删除这些行:

docdigital.mediatorInstance.send(
docdigital.constants.mediator.messages.clonePrototype_prototypeAdded,
$clone
);

关于collections - 如何在 Symfony2 表单类型的集合中动态添加集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10288845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com