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