[英]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.