Пакет документов Symfony2 mongodb «один ко многим» - PullRequest
1 голос
/ 31 марта 2012

У меня проблема с использованием форм в Symfony 2 с документами mongoDB.

Я пытаюсь создать форму, которая будет представлять мой первый документ (сообщение) с отношением oneToMany к тегам (ссылка)

Отношение объявлено так:

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

У тега есть Id и Name.

Я много чего пробовал, чтобы она заработала

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

Форма показывает варианты выбора, но после ее отправки форма становится недействительной и продолжает отображать эту ошибку:

"Поля« 0 »,« 1 »,« 2 »не были ожидаемы»

Я также пробовал это: Выбор формы Symfony2 и mongodb

Но его использование немного сбивает с толку

UPDATE

Это то, что я получаю после отправки сообщения:

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 не обрабатывает его.

Я искал возможные связки, но ничего

Я понятия не имею, как получить красивую форму, которая будет увлажнять мой объект и связанные с ним объекты, У кого-нибудь есть решение этой проблемы или другая идея, чтобы решить эту проблему?

Спасибо большое!

Ответы [ 2 ]

0 голосов
/ 01 октября 2015
Поле

A choice не будет сохранено по умолчанию (хотя вы можете сделать это вручную при отправке формы). Вам нужно взглянуть на тип document, который, по общему признанию, плохо документирован, но по сути тот же тип, что и entity здесь .

Я не видел, это было 3 года назад! Ну, это здесь на случай, если другие найдут эту страницу, я думаю.

0 голосов
/ 01 апреля 2012

Не видя задействованных данных, я могу только высказать предположение.

Такое ощущение, что ваша строка кода должна выглядеть примерно так.

$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
        )
    );

Теперь я думаю, что происходитвы получаете данные в $ тэгах в такой форме.

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

Где то, что вы действительно хотите, вероятно, так:

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

Если это не так, ответьте с некоторыми данными, и я уверен, что мы 'смогу помочь еще немного.

...