Symfony2表单为什么我的表单返回警告:json_encode():检测到递归



我必须实体,应用程序和投票。

这个想法是将多对一联系起来。因此,应用程序有很多投票,一个投票是针对一个应用程序。

在我的实体类中,我有这样的设置:

应用程序实体类:

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

投票实体类:

/**
* @ORMManyToOne(targetEntity="Application", inversedBy="votes")
* @ORMJoinColumn(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:wampwwwprojectvendorsymfonysymfonysrcSymfonyComponentHttpFoundationJsonResponse.php line 92

堆栈跟踪(纯文本):http://pastebin.com/bSQTDJQY

实体容易出现递归问题,如果你var_dumpprint_r一个整体,它就会挂起。

能够将实体转换为分层非递归树的最佳序列化工具之一是: https://github.com/schmittjoh/JMSSerializerBundle

它与 FOSRestBundle 一起使用,作为其透明可接受响应处理的一部分。

您遇到了与此类似的问题:避免使用学说实体和 JMS序列化程序递归

查看解决方案,并尝试使用JMSSerializer。

编辑:其他可能的原因:

返回array时,将返回该数组中包含的表单。您的事件侦听器正在尝试将其序列化为 json,这既是问题的原因,也是相对毫无意义的,除非表单用于提供增强的数据模板。

无论哪种方式,表单都不能如此简单地序列化,您甚至打算这样做吗?

相关内容

  • 没有找到相关文章

最新更新