1

mongoDB ドキュメントで Symfony 2 のフォームを使用する際に問題があります。

タグへのリレーション oneToMany (参照) を持つ最初のドキュメント (投稿) を表すフォームを作成しようとしています。

関係は次のように宣言されます。

/**
 * @Assert\Collection
 * @MongoDB\ReferenceMany(targetDocument="Acme\ManagerBundle\Document\Tags")
 */
protected $tags;

タグには ID と名前があります。

私はそれを機能させるために多くのことを試みました

$form = $this->createFormBuilder($tag)->add('tags', 'choice', array('choices' => $tags, 'multiple' => true, 'expanded' => true, 'empty_value' => true,  ))

フォームには選択肢が表示されますが、フォームが送信されると無効になり、このエラーが表示され続けます。

「フィールド "0"、"1"、"2" は予期されていませんでした」

私もこれを試しました:symfony2フォームの選択とmongodb

しかし、それの使用はちょっと混乱しています

アップデート

これは、投稿が送信された後に得られるものです:

object(Doctrine\Common\Collections\ArrayCollection)#795 (1) {
  ["_elements":"Doctrine\Common\Collections\ArrayCollection":private]=>
  array(2) {
    [0]=>
    object(Acme\ManagerBundle\Document\Tags)#723 (2) {
      ["id":protected]=>
      string(24) "4f7a0eb1ecd111b99c3d2f25"
      ["name":protected]=>
      string(6) "Fruits"
    }
    [1]=>
    object(Acme\ManagerBundle\Document\Tags)#720 (2) {
      ["id":protected]=>
      string(24) "4f7a0ec7ecd111b99c3d2f26"
      ["name":protected]=>
      string(10) "Vegetables"
    }
  }
}

これで、「フィールド「0」、「1」、「2」は予期されていませんでした」という理由がわかりましたが、Symfony がそれを処理しない理由がわかりません。

可能なバンドルを探してきましたが、何もありません

私のオブジェクトと関連するオブジェクトを水和させる素敵なフォームを作成する方法がわかりません。この問題の解決策や、これを解決するための他のアイデアを持っている人はいますか?

本当にありがとう !

4

2 に答える 2

0

choiceフィールドはデフォルトでは保存されません (ただし、フォーム送信時に手動で保存できます) 。document確かに十分に文書化されていないタイプを調べる必要がありますが、本質的にはentity hereと同じタイプです。

これが3年前のものとは思えませんでした!まあ、他の人がこのページを見つけた場合に備えて、ここにあると思います。

于 2015-10-01T18:05:25.210 に答える
0

関連するデータを確認しないと、ここで最善の推測しかできません。

コード行は次のようになります。

$tags = $post->getTags();

$fixedTags = array();
foreach ($tags as $tag) {
    $fixedTags[$tag->getId()] = $tag->getName();
}

$form = $this->createFormBuilder($post)
    ->add(
        'tags', 
        'choice', 
        array(
            'choices' => $fixedTags,
            'multiple' => true,
            'expanded' => true,
            'empty_value' => true
        )
    );

$tags データをこのような形式で取得していると思います。

array(0 => (Object)Tag, 1 => (Object)Tag, 2 => (Object)Tag)

あなたが本当に欲しいものはおそらくこのようなものです。

array('topic1' => 'Topic 1', 'topic2' => 'Topic 2', 'topic3' => 'Topic 3')

そうでない場合は、データ出力を添えて返信してください。さらにサポートできると確信しています。

于 2012-03-31T20:43:26.713 に答える