【问题标题】:Symfony 2.4 - Adding dinamically fields in the formSymfony 2.4 - 在表单中动态添加字段
【发布时间】:2016-02-20 21:35:33
【问题描述】:

我使用 Symfony 2.4 创建了一个未链接到任何实体的表单,因为我只想获取数据来创建报告。我已经使用 AbstractType 扩展类创建了一个表单,我需要添加几个项目,因为该表单代表一个账单。我知道 allow_add 属性,但它只是允许向表单添加一个字段,我需要做一些我在图像中显示的操作:

我完全不知道该怎么做,我创建了一个项目类,它包含两个属性,但我找不到任何关于此的信息。到目前为止,这就是我所拥有的:

namespace Abadia\FacturaBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;>

class ReciboCajaType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('ciudad', 'text')
            ->add('fecha', 'date')
            ->add('valor', 'number')
            ->add('recibi_de', 'text')
            ->add('suma_recibida', 'number')
            ->add('suma_letras', 'textarea')
            ->add('bloque', 'text')
            ->add('numero', 'text')
            ->add('descripcion', 'textarea')
            ->add('areas_comunes', 'number')
            ->add('cuota_extraordinaria', 'number')
            ->add('saldo', 'number')
            ->add('cheque', 'number')
            ->add('otros', 'number')
            ->add('efectivo', 'number')
            ->add('generar', 'submit')
        ;
    }

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array());
    }
}

提前致谢。

更新: 我忘了提到我正在使用 Twig 扩展。以防万一知道如何使用它。

【问题讨论】:

  • 我会这样做:将当前表单数据以json格式传入页面。如果用户单击“添加新项目”链接,则将有关表单的信息(json 中的信息)添加到您想要的类中,添加新项目,返回新的 json 并让 javascript 再次构建表单。您可能会在使用 formkey(令牌)时遇到麻烦,但那是另一个话题。

标签: php forms symfony symfony-2.4


【解决方案1】:

基本上,您将需要 2 个表格。一个,将其称为主表单,将其称为项目的另一种表单。然后您可以使用collection type 将项目表单类型多次嵌入到主表单类型中。您还需要一些 javascript 来添加和删除项目。具体怎么做会很长,但是docs中有一个很好的例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2011-09-02
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    相关资源
    最近更新 更多