2014-01-03 2 views
2

У меня есть сущности, приложения и голоса.Symfony2 Form, почему моя форма возвращает предупреждение: json_encode(): обнаружена рекурсия?

Идея состоит в том, чтобы связать многих с одним. Таким образом, приложения имеют много голосов и один голос для одного приложения.

В моем классе сущностей у меня есть такие настройки, как это:

Применение Entity Класс:

\/** 
\* @ORM\OneToMany(targetEntity="Vote", mappedBy="application") 
\*/ 
\private $votes; 

Голосовать Entity Класс:

\/** 
\* @ORM\ManyToOne(targetEntity="Application", inversedBy="votes") 
\* @ORM\JoinColumn(referencedColumnName="id") 
\*/ 
\private $application; 

Я думаю, что это соотношение устанавливается хорошо или я Я ошибаюсь?

Следующая вещь, что у меня есть класс формы строитель только одно поле:

$builder->add('rate') 
    ->add('save', 'submit'); 

голосов организация имеет поля: (id, username, rate, createdAt, updatedAt, application)

и в моем контроллере я делаю что-то вроде этого:

$vote = new Vote(); 
    $form = $this->createForm(new VoteType(), $vote); 

    $form->handleRequest($this->getRequest()); 

    if ($form->isValid()) { 
     $vote->setUserName($tenant->getUsername()); 
     $vote->setApplication($app); 
     $em->persist($vote); 
     $em->flush(); 

     $this->get('session')->getFlashBag()->add('success', 'Oceniono aplikację.'); 

     return $this->redirect($this->generateUrl('applications_main')); 
    } 

    return array('form' => $form->createView(),); 

и он не работает, он возвращает мне ошибку:

ContextErrorException: Warning: json_encode(): recursion detected in E:\wamp\www\project\vendor\symfony\symfony\src\Symfony\Component\HttpFoundation\JsonResponse.php line 92 

трассировка стеки (обычный текст): http://pastebin.com/bSQTDJQY

+0

Это не похоже на отношение. Почему вызывается json_encode? вы кодируете свой ответ? – Flosculus

+0

nope то, что вы видите, почти полный метод контроллера im только создавая $ app до еще – Vardius

+0

'E: \ wamp \ www \ project \ src \ project \ ApiBundle \ EventListener \ ViewListener.php строка 49' ваша проблема лежит внутри. – Flosculus

ответ

0

Сущность склонна к рекурсивным вопросам, если вы var_dump или print_r entitiy, она будет висеть.

Один из лучших инструментов сериализации, который способен превратить объект в иерархическое нерекурсивно дерево: https://github.com/schmittjoh/JMSSerializerBundle

Он используется с FOSRestBundle как часть своей прозрачной приемлемой передачи ответа.

Вы имеете подобный вопрос к этому: Avoiding recursion with Doctrine entities and JMSserializer

Отъезд решение, и попытаться использовать JMSSerializer.

// ======================================================================================================================= ======== //

Edit: Другая вероятная причина

// ========================= =======================================

Когда вы возвращаете array, вы возвращаете форму, содержащуюся в этом массиве. Ваш слушатель событий пытается сериализовать это как json, это как причина проблем, так и относительно бессмысленно, если форма не используется для предоставления расширенного шаблона данных.

В любом случае, форма не может быть сериализована так просто, вы даже хотели это сделать?

+0

, так что проблема в том, что мой объект приложения также связан со многими со многими категорированными объектами? – Vardius

+0

Возможно, если это другое отношение. Мой первый комментарий, вероятно, неверен, базовые сериализаторы не так уж умны, вам нужно сказать, когда остановиться. – Flosculus

+0

, но моя форма для добавления категории отлично работает, также форма для добавления функции с категорией отлично работает, и все выглядит похоже. Мне не нужно (при добавлении голоса) создавать отношения или мне нужно? не могу я просто создать сущность по форме и, возможно, в будущем связал его с каким-то приложением? Я не смотрю там для каких-либо приложений моего голосования. – Vardius

Смежные вопросы