2016-11-23 5 views
0

Je le fais les étapes:Erreur Une référence circulaire a été détectée sur symfony 3

1.) J'appelle mon point final api: http://localhost:8000/api/addrole

2.) C'est le contrôleur appelé:

/** 
* @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.) les données sur cette étape:

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

est sauvegardé les données sur la base de données.

4.) Voici la réponse:

{ 
    "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.) si je commenter cette ligne:

//$em->flush(); 

les données obviosly ne sauvegardons pas, mais l'erreur est pas THROWED.

Avez-vous besoin d'aide?

+0

Avez-vous des écouteurs d'événement pour cette entité? ou avez-vous des dépendances dans le Repository? (Injecté) – Vamsi

+0

Dieu ... j'ai trouvé l'erreur @Vamsi L'erreur est le code post '$ em-> flush();' ceci: '$ data = array ( 'resultat' => 'Rol asignado', 'utilisateur' => $ utilisateur, 'assignedRole' => $ assignedRole ); return $ data; 'Je mettrai à jour ma réponse bientôt. Merci de votre aide. –

Répondre

0

Enfin, j'ai trouvé l'erreur.

Le problème est sur ce code:

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

Après l'i flush l'objet utilisateur $. Cela génère le problème.

Merci à tous.