es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Symfony 4 – JsonResponse devuelve un objeto no vacío como vacío

Estoy intentando devolver el resultado de una solicitud de API (usando Postman) en Symfony.

Aquí está mi código relevante del controlador:

/**
 * @Route("/apis/login", name="api_login")
 */
public function login(Request $request, UserRepository $userRepository): Response
{
    $cin = json_decode($request->getContent(),true)["cin"];
    $password = json_decode($request->getContent(),true)["password"];
    $user = $userRepository->findOneBy(['cin'=>$cin, 'password'=>$password]);
    if($user!=null){
        return new JsonResponse(json_encode($user));
    }else{
        return new JsonResponse("false");
    }
}

Y este es el cuerpo de la solicitud:

Imagen de solicitud

Sin embargo, esto es lo que obtengo como resultado:

Imagen de resultado

En mi código, si cambio esta línea return new JsonResponse(json_encode($user)); por esta return new JsonResponse(serialize($user));, obtengo esto:

Imagen de resultado

Lo cual demuestra que el objeto devuelto no está vacío. ¿Alguna idea de cómo solucionar eso?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar con la función json_encode utilizada en return new JsonResponse(json_encode($user));. Esta función no puede manejar objetos de tipo User devueltos por $userRepository->findOneBy().

    En lugar de utilizar json_encode, puedes intentar usar el serializador incorporado de Symfony para serializar $user en una cadena JSON. Aquí te explico cómo puedes modificar tu código:

    1. Agrega el servicio de serializador como argumento en el método de tu controlador:
    use Symfony\Component\Serializer\SerializerInterface;
    
    ...
    
    public function login(Request $request, UserRepository $userRepository, SerializerInterface $serializer): Response
    
    1. Usa el serializador para serializar $user:
    if($user!=null){
        $jsonUser = $serializer->serialize($user, 'json');
        return new JsonResponse($jsonUser);
    }else{
        return new JsonResponse("false");
    }
    

    Esto debería serializar el objeto $user en una cadena JSON que puede ser devuelta como respuesta.

Comments are closed.