Я пытаюсь создать «сложную форму», используя 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) }}
Любая идея, чтобы решить это?
Когда вы создаете форму в Controller, вы можете создать там 6 объектов SisEvo\ConfiguracionBundle\Entity\VariableReguladaElectricoValoresDatos
как ArrayCollection
и установить его как idDatos, а затем передать его в виде setData
метод формы
Других решений пока нет …