2016-01-02 3 views
1

Я мог бы заставить это работать до v2.8, но поскольку symfony теперь использует полное имя класса, я не уверен, как это сделать. Я могу передать массив (заполнить поле выбора) в форму без проблем, но если есть еще один formType, добавленный через collectionType, как можно передать массив?Symfony 2.8/3.0 - Передача массива в другую формуТип из коллекцииType

BTW - массив собран из данных из пользовательских аннотаций - не сущность Heres мой код:

PageType.php

<?php 
    namespace Prototype\PageBundle\Form; 

    use Symfony\Component\Form\AbstractType; 
    use Symfony\Component\Form\FormBuilderInterface; 
    use Symfony\Component\OptionsResolver\OptionsResolver; 

    const ActiveComponentsType = 'Prototype\PageBundle\Form\ActiveComponentsType'; 
    const collectionType = 'Symfony\Component\Form\Extension\Core\Type\CollectionType'; 

    class PageType extends AbstractType 
    { 

     private $cmsComponentArray; 

     public function __construct($cmsComponentArray = null) 
     { 
      $this->cmsComponentArray = $cmsComponentArray; 
     } 

     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 

      $cmsComponentArray = $options['cmsComponentArray']; 

      $componentChoices = array(); 
      foreach($cmsComponentArray as $cmsComponent){ 
       $componentChoices[$cmsComponent['name']] = $cmsComponent['route']; 
      } 

      //correct values are shown here 
      //print_r($componentChoices); 

      $builder 
       ->add('title') 
       ->add('parent') 
       ->add('template') 
       ->add('active') 
       ->add('content') 
       ->add('components', collectionType, array(
        'entry_type' => ActiveComponentsType, // i want to pass $cmsComponentArray to ActiveComponentsType 
        'allow_add' => true, 
        'allow_delete' => true 
       )) 

      ; 
     } 

     /** 
     * @param OptionsResolver $resolver 
     */ 
     public function configureOptions(OptionsResolver $resolver) 
     { 
      $resolver->setDefaults(array(
       'data_class' => 'Prototype\PageBundle\Entity\Page', 
       'cmsComponentArray' => null 
      )); 
     } 
    } 

ActiveComponentsType форма делает поместить его работу - за исключением того, что я unsure, как передать массив $ componentChoices.

Любые идеи?

ответ

1

Тип коллекции определяет параметр entry_options, который используется для настройки параметров, которые передаются во встроенный тип формы.

+0

Ah ha! просто получил его работу - Спасибо! –

Смежные вопросы