【问题标题】:Symfony2 : data not binded to form with handleRequest()Symfony2:数据未使用 handleRequest() 绑定到表单
【发布时间】:2016-01-24 00:29:02
【问题描述】:

我创建了一个带有嵌套集合的复杂 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';
    }
}

类别表单类型:

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

谢谢帮助

【问题讨论】:

  • 我认为你的字段名称必须是simulator_category而不是simulator_category_collection。
  • 我试过了,没有任何改变。

标签: forms symfony


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2016-04-15
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2015-05-14
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多