Как добавить строки в 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) }}

Любая идея решить эту проблему?


person Isaac Bosca    schedule 08.09.2016    source источник


Ответы (1)


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

person Tom    schedule 11.09.2016