2015-10-24 2 views
0

Я создал сложную форму symfony с вложенной коллекцией. Когда я создаю мою форму с данными ОРМ работает: CategoryCollectionFormTypeSymfony2: данные не привязаны к форме с помощью handleRequest()

$categories = $this->getDoctrine()->getRepository('xx:CategoryNutritionProgram')->findAll(); 
$form = $this->createForm(new CategoryCollectionFormType(), array('categories' => $categories)); 

:

class CategoryCollectionFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder->add('categories', 'collection', array(
     'type' => new CategoryFormType(), 
     'cascade_validation' => true, 
     'allow_add' => true, 
     'by_reference' => false, 
     'allow_delete' => true, 
     'prototype_name' => '__i__' 
    )); 
    } 

    /** 
    * Returns the name of this type. 
    * 
    * @return string The name of this type 
    */ 
    public function getName() 
    { 
    return 'simulator_category_collection'; 
    } 
} 

CategoryFormType: функция

class CategoryFormType extends AbstractType 
{ 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('name', 'hidden'); 

     $builder->add('nutritionPrograms', 'collection', array(
      'type' => new NutritionProgramFormType(), 
      'cascade_validation' => true, 
      'allow_add' => true, 
      'by_reference' => false, 
      'allow_delete' => true, 
      'prototype_name' => '__j__' 
     )); 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'xx\Entity\CategoryNutritionProgram' 
     )); 
    } 

    /** 
    * Returns the name of this type. 
    * 
    * @return string The name of this type 
    */ 
    public function getName() 
    { 
     return 'simulator_category'; 
    } 
} 

и т.д ...

Но handleRequest() не работает, и $ data пустые, когда я отправляю форму. В чем проблема ? мой код кажется хорошим

$data = array('categories' => array()); 
$form = $this->createForm(new CategoryCollectionFormType(), $data); 
$form->handleRequest($request); 

Ниже данные, отправляемые по запросу POST:

simulator_category_collection[categories][0][name]:cat1 
simulator_category_collection[categories][0][nutritionPrograms][0][name]:prog1 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][0][name]:app1 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][0][product]:1 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][0][dose]:5 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][0][unit]:5 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][1][name]:app2 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][1][product]:2 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][1][dose]:6 
simulator_category_collection[categories][0][nutritionPrograms][0][applications][1][unit]:6 
simulator_category_collection[categories][0][nutritionPrograms][1][name]:prog2 
simulator_category_collection[categories][0][nutritionPrograms][1][applications][0][name]:app3 
simulator_category_collection[categories][0][nutritionPrograms][1][applications][0][product]:3 
simulator_category_collection[categories][0][nutritionPrograms][1][applications][0][dose]:7 
simulator_category_collection[categories][0][nutritionPrograms][1][applications][0][unit]:7 
simulator_category_collection[categories][1][name]:cat2 
simulator_category_collection[categories][1][nutritionPrograms][0][name]:prog3 
simulator_category_collection[_token]:xxx 

Thx за помощью

+0

Я думаю, что имя ваших полей должно быть simulator_category вместо simulator_category_collection. – Airam

+0

Я пробовал, ничего не меняет. – Mewyn

ответ

0

Решено, вместо того, чтобы пытаться получить данные от первоначально объекта, как это:

$data = array('categories' => array()); 
$form = $this->createForm(new CategoryCollectionFormType(), $data); 
$form->handleRequest($request); 
// here array $data is empty 

Я должен использовать $form->getData(), потому что мой массив передается значением

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