【问题标题】:Error A circular reference has been detected on symfony 3错误在 symfony 3 上检测到循环引用
【发布时间】:2017-04-06 21:35:56
【问题描述】:

我执行以下步骤:

1.) 我调用我的 api 端点:http://localhost:8000/api/addrole

2.) 这是被调用的控制器:

/**
 * @Rest\Post("/addrole")
 */
 public function addRoleAction(Request $request)
{
    $userid = $request->get('userid');
    $assignedRole = $request->get('role');
    $assignedRoleName = $request->get('role_name');

    // Obtain the User
    $em = $this->getDoctrine()->getManager();
    $user = $em->getRepository('AppBundle:User')
        ->find($userid);

  // If the user gives not exists, throw error
    if (!$user) {
        throw new HttpException (400,"No se ha encontrado el usuario solicitado: " .$userid);
     }

     // obtain present user roles
    $presentRoles = $user->getRoles();
    $role_length = count($presentRoles); 
    $role_list = array();
    for ($i=0; $i <$role_length ; $i++) { 
    array_push($role_list,$presentRoles[$i]->getRole());
    }

    if(!in_array($assignedRole,$role_list)){
        $role = $em->getRepository('AppBundle:Role')
            ->findOneBy(array('role' => $assignedRole));
        $user->addRole($role);
        $em->persist($user); // persisting only the user. 
        $em->flush();

            $data = array(
                'result' => 'Rol asignado',
                'user' => $user,
                'assignedRole' => $assignedRole
            );
        return $data;
    } else {
        throw new HttpException (400,"El usuario ya posee el rol solicitado");
    }

}

3.) 这一步的数据:

 $user->addRole($role);
 $em->persist($user); // persisting only the user. 
 $em->flush();

正在将数据保存在数据库中。

4.) 这是响应:

{
  "error": {
    "code": 500,
    "message": "Internal Server Error",
    "exception": [
      {
        "message": "A circular reference has been detected (configured limit: 1).",
        "class": "Symfony\\Component\\Serializer\\Exception\\CircularReferenceException",...

5.) 如果我评论这一行:

 //$em->flush();

数据显然不保存,但没有抛出错误。

有什么线索吗?

【问题讨论】:

  • 你有这个实体的事件监听器吗?还是您在存储库中有一些依赖项? (注入)
  • 上帝...我发现了错误@Vamsi 错误是代码发布$em-&gt;flush(); 这个:$data = array( 'result' =&gt; 'Rol asignado', 'user' =&gt; $user, 'assignedRole' =&gt; $assignedRole ); return $data; 我会尽快更新我的答案。感谢您的帮助。

标签: symfony doctrine user-roles


【解决方案1】:

我终于找到了错误。

问题出在这段代码上:

...
post $em->flush(); 
this: $data = array('result' => 'Rol asignado', 'user' => $user, 'assignedRole' => $assignedRole ); 
return $data;

在刷新之后我调用了 $user 对象。这会产生问题。

谢谢大家。

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 2021-09-01
    • 2018-04-14
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多