繁体   English   中英

如何在Symfony2表单中向CollectionType添加行?

[英]How to add rows to CollectionType in Symfony2 Form?

我正在尝试使用Symfony2创建一个“复杂的表单”。 这种形式的一个字段是从另一个“简单形式”创建的,并且表单的6个字段是从另一个“简单形式”创建的(所以它是重复字段,是)。 它就像一个“表格形式”或嵌入形式。

以下代码对应于第一个“简单形式”,它只是“复杂形式”的一个字段:

<?php

namespace SisEvo\ConfiguracionBundle\Form;

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

class VariableReguladaElectricoValoresDatosType extends AbstractType{

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
     public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
            ->add('valor');          
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults(array(
            'data_class' =>     'SisEvo\ConfiguracionBundle\Entity\VariableReguladaElectricoValoresDatos'
        ));
    }

}

另一个“简单形式”将以“复杂形式”重复6次:

<?php

namespace SisEvo\MaestroBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;


class VariablesMedidaType extends AbstractType{

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array     $options) {
         $builder->add("medida", EntityType::class, array(
                    'required' => true,
                    'class' => 'MaestroBundle:VariablesMedida',
                    'choice_label' => 'medida',
                ));
    }

    /**
     * @param OptionsResolver $resolver
     */
     public function configureOptions(OptionsResolver $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'SisEvo\MaestroBundle\Entity\VariablesMedida'
         ));
    }

}

最后,“复杂形式”:

<?php

namespace SisEvo\ConfiguracionBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use SisEvo\MaestroBundle\Form\VariablesMedidaType;
use SisEvo\ConfiguracionBundle\Form\VariableReguladaElectricoValoresDatosType;

class VariableReguladaElectricoValoresType extends AbstractType {

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
            ->add('idDatos', CollectionType::class, array(
                // each entry in the array will be an "email" field
                'entry_type' => VariableReguladaElectricoValoresDatosType::class,
                // these options are passed to each "email" type
                'entry_options' => array(
                    'attr' => array(
                        'rows' => 6
                    //,'class' => 'VariableReguladaElectricoValoresDatos'
                    )),
            ))
            //->add('valores', 'collection', array('type' => new VariableReguladaElectricoValoresDatosType()))
            ->add('idMedida', new VariablesMedidaType());
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver) {
    $resolver->setDefaults(array(
        'data_class' => 'SisEvo\ConfiguracionBundle\Entity\VariableReguladaElectricoValores'
        , 'cascade_validation' => true
    ));
    }

}

idMedida字段工作正常,但我需要一些帮助来打印idDatos字段,应该打印6次。 我尝试使用选项行来执行此操作,您可以在代码中看到,但无法正常工作。

{{ form_widget(myComplexForm) }}文件中,我正在尝试使用{{ form_widget(myComplexForm) }}打印表单

有什么想法解决它吗?

在Controller中创建表单时,可以创建6个SisEvo\\ConfiguracionBundle\\Entity\\VariableReguladaElectricoValoresDatos作为ArrayCollection并将其设置为idDatos,然后将其作为表单的setData方法传递给表单

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM