Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Symfony2:未使用HandlerRequest()绑定到表单的数据_Forms_Symfony - Fatal编程技术网

Forms Symfony2:未使用HandlerRequest()绑定到表单的数据

Forms Symfony2:未使用HandlerRequest()绑定到表单的数据,forms,symfony,Forms,Symfony,我用嵌套集合创建了一个复杂的symfony表单。当我使用orm中的数据创建表单时,它可以工作: $categories = $this->getDoctrine()->getRepository('xx:CategoryNutritionProgram')->findAll(); $form = $this->createForm(new CategoryCollectionFormType(), array('categories' => $categories)

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

$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';
    }
}
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';
    }
}
类别FORM类型:

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';
    }
}
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帮助解决,而不是像这样尝试从原始对象获取数据:

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

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

我认为字段的名称必须是simulator\u category,而不是simulator\u category\u collection。我已经尝试过了,它没有任何改变。