0

我在 Symfony 中获得了一个表单,但它不会验证,我不知道为什么。

来自 UserBundle/Entity/Task.php

/**
 *
 * @ORM\ManyToMany(targetEntity="Project\TaskBundle\Entity\Task", inversedBy="users")
 * @ORM\JoinTable(name="project_users_tasks")
 * 
 */
protected $tasks;

来自我的表单生成器 UserBundle/Form/CreateUserFormType.php:

 $builder->add('tasks', 'entity', array(
            'class' => 'TaskBundle:Task',
            'query_builder' => function(EntityRepository $er) {
                return $er->createQueryBuilder('b')
                ->andWhere('b.owner = :owner')
                ->setParameter('owner', $this->securityContext->getToken()->getUser())
                ->addOrderBy('b.updated', 'ASC');
            },
            'expanded' => false,
            'multiple' => false
            ));

我浏览器中的发布请求:

------WebKitFormBoundary6IBT2Ycy78N9AI7u
Content-Disposition: form-data; name="createUser[tasks][]"

14

我得到的表单结果是有关任务的错误:“此值无效”

我没有得到任何其他验证。那么为什么不能将任务 14(例如清洁盘子)分配给我的用户?我的意思是任务的 id 应该工作还是不工作?

编辑: Symfony 似乎无法识别数据,这就是原因。$form->getData() 的 print_r;

[tasks:protected] => Doctrine\Common\Collections\ArrayCollection Object
        (
            [_elements:Doctrine\Common\Collections\ArrayCollection:private] => Array
                (
                )

        )

但怎么可能呢?我可以看到我的浏览器正在发布数据。

4

1 回答 1

0

乍一看,您提交的字段名称中有两个括号太多:createUser[tasks][]应该是createUser[tasks],因为实体字段是折叠的单值实体字段。

也尝试调试 Symfony 的请求对象。var_dump($request->request->get('createUser'))应该返回类似

array(
    'tasks' => 14,
)

另一方面,如果您确实提交一个或多个任务,请将实体字段上的“多个”选项设置为true. 那么请求数据应该是这样的

array(
    'tasks' => array(
        0 => 14,
    )
)
于 2013-08-20T09:35:13.713 回答