2016-11-23 6 views
0

я сделать это шаги:Ошибка Круговой ссылка была обнаружена на Symfony 3

1.) Звоню апи конечную точку: 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(); 

данные obviosly не спасти, но ошибка не забросил.

Любые подсказки об этом?

+0

У вас есть слушатели этого мероприятия? или у вас есть некоторые зависимости в репозитории? (Injected) – Vamsi

+0

Бог ... я обнаружил ошибку @ Vamsi Ошибка - это сообщение типа '$ em-> flush();' this: '$ data = array ( 'result' => 'Rol asignado', 'user' => $ user, 'assignRole' => $ assignRole ); return $ data; 'я скоро обновлю свой ответ. Спасибо за вашу помощь. –

ответ

0

И наконец, я нашел ошибку.

Проблема на этот код:

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

После промывки я назвал объект $ пользователя. Это порождает проблему.

Спасибо всем.