2016-09-08 24 views
1

私はSymfony2を使って "複雑なフォーム"を作成しようとしています。このフォームの1つのフィールドは別の「シンプルフォーム」から作成され、フォームの6つのフィールドは別の「シンプルフォーム」から作成されます(繰り返しフィールド、はい)。それは "フォームのフォーム"や埋め込みフォームのようなものです。Symfony2フォームのCollectionTypeに行を追加する方法は?

<?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) }}

任意のアイデアを使用してフォームを印刷しようとしている小枝ファイルで

答えて

0

あなたがコントローラでフォームを作成する場合、フォーム

setData方法として形成するためにそれを渡し、その後、 ArrayCollectionとしてそこ SisEvo\ConfiguracionBundle\Entity\VariableReguladaElectricoValoresDatosの6つのエンティティを作成し、idDatosとして設定することができます
関連する問題