Symfony2:没有绑定到handleRequest()形式的数据

时间:2015-10-24 15:24:30

标签: forms symfony

我创建了一个带有嵌套集合的复杂symfony表单。当我使用orm中的数据创建表单时,它可以工作:

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

CategoryCollectionFormType:

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

寻求帮助

1 个答案:

答案 0 :(得分:0)

已解决,而不是尝试从原始对象获取数据:

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

我必须使用$form->getData(),因为我的数组是按值传递的