2016-11-23 14 views
0

上で検出された私は、これは、手順します:エラー循環参照はsymfonyの3

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

は、DBのデータを保存しています。

4)これは、応答である:

//$em->flush(); 

データはobviosly保存されませんが、エラーがthrowedされていません。私は、この行をコメント場合

{ 
    "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)。

これについての手掛かりはありますか?

+0

このエンティティのイベントリスナーはありますか?リポジトリにいくつかの依存関係がありますか? (注射された) – Vamsi

+0

神... @Vamsiのエラーを見つけました。エラーはコードの投稿 '$ em-> flush();'です:$ data = array( 'result' => 'Rol asignado'、 'user' => $ user、 'assignedRole' => $ assignedRole ); return $ data; '私はすぐに私の答えを更新します。ご協力いただきありがとうございます。 –

答えて

0

最後にエラーが見つかりました。

問題は、このコードにある:私は$ユーザーオブジェクトと呼ばれるフラッシュ後

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

。これにより問題が発生します。

ありがとうございます。