Как добавить строки в CollectionType в форме Symfony2?

Я пытаюсь создать «сложную форму», используя 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) }}

Любая идея, чтобы решить это?

1

Решение

Когда вы создаете форму в Controller, вы можете создать там 6 объектов SisEvo\ConfiguracionBundle\Entity\VariableReguladaElectricoValoresDatos как ArrayCollection и установить его как idDatos, а затем передать его в виде setData метод формы

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]