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

エンティティ フィールドは折りたたまれた単一値のエンティティ フィールドであるため、一見すると、送信されたフィールド名に 2 つの括弧が多すぎます:createUser[tasks][]である必要があります。createUser[tasks]

また、Symfony のリクエスト オブジェクトをデバッグしてみてください。var_dump($request->request->get('createUser'))次のようなものを返す必要があります

array(
    'tasks' => 14,
)

一方、本当に1 つ以上のタスクを送信したい場合は、エンティティ フィールドの「複数」オプションを に設定します。次に、リクエストデータは次のようになりますtrue

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