En este artículo nos adentraremos a los helpers de los Reponses de Laravel, para esto, primero haremos un repaso de las respuestas para los recién ingresados al mundo de este maravillo Framework de PHP y luego detallaremos cada función de las respuestas y mencionare algunos tips. 😉
¿Qué son los Responses de Laravel?
Todas las solicitudes que realiza el navegador a nuestra aplicación deben ser respondidas y aquí es donde entran los Responses que son distintas funciones de Laravel que permiten responder cualquier solicitud realizada por el navegador u otra aplicación.
¿Cómo utilizar las Responses del Framework Laravel?
Todos los Controladores y Rutas de Laravel deben devolver una respuesta a las solicitudes que reciben y el framework se encarga de transformarlas en respuestas HTTP según sea necesario. Para esto puedes utilizar los helpersresponse(), back(), redirect(), abort()
, entre otras que nos brinda Laravel.
Los helpers nos brinda distintas funciones para utilizar según el tipo de respuesta que deseemos realizar (redirecciones, respuestas 404, respuestas json, etc.), vamos a analizar cada una de ellas y veremos si podes sacar alguna gema oculta y/o buenas practicas:
Analizando el código del helper response
response($contenido, $codigoRespuesta = 200, array $headers = [])
: Response es la función básica donde le pasamos el contenido de la respuesta. Podría ser una vista o una cadena de texto. También, podríamos asignar otro código de respuesta y header distinto.
Mirando el código de este helper, pude ver que termina devolviendo una instancia de la clase Response (Illuminate\Http\Response
) iniciándolo con los mismos tres parámetros (contenido, código de respuesta y cabeceras).
Pero no es recomendable utilizar la clase Response para generar tus respuestas y es mejor utilizar el helper response()
. Ya que el helper hace verificaciones (de parámetros por ejemplo) que la clase por si sola, no las hace.
Analizando el código del helper redirect
redirect($to = null, $status = 302, $headers = [], $secure = null)
: Esta función genera una redirección 302 a la url que le pasamos como parámetro.
El tip que podemos sacar de la función redirect es que el helper termina devolviendo una instancia de la clase Redirector (Illuminate\Routing\Redirector
) utilizando el método to()
por lo tanto, podemos sacar otro laravel tip:
// En vez de esto: return response()->to($path); // Podes usar esto: return response($path);
Otro tip que podemos sacar es que, si pasamos true como ultimo parámetro, la redirección fuerza a que se haga por HTTPS.
Si estas utilizando Nginx como servidor web, acá te dejo un artículo para configurar HTTPS en Laravel con Nginx. Y, si utilizas Apache puedes ver este artículo para obtener un certificado ssl gratuito y activar HTTPS en tu servidor Apache.
Analizando el código del helper back
back($status = 302, $headers = [], $fallback = false)
: Otra función para hacer una redirección 302 pero con la particularidad que realiza una redirección a la ultima pagina visitada por el usuario, ya que obtiene el «referer» de la cabecera HTTP. Mirando el código de la función, se puede deducir que:
// En vez de esto: return redirect()->back(); // Podes usar esto: return back();
Helper para responder a una API
response()->json($data = [], $status = 200, array $headers = [], $options = 0)
: este responses genera un respuesta 200 (por defecto) en formato JSON, ya sea para responder a una API Rest, por ejemplo. Laravel se encarga de asignar el header application/json
a la respuesta por nosotros.
Como responder una pagina de error con el helper abort de Laravel
abort($code, $message = '', array $headers = [])
: El helper abort normalmente se utilizar para que Laravel genere una respuesta de error 404. De esta forma, genera una excepción HTTP mostrando la típica pagina de error 404 de Laravel.
Pero, analizando el código de la función abort()
se pueden sacar varios tips interesantes.
- No solo podes utilizar abort para responder una pagina 404, también podes usar cualquier otro código HTTP. Por otro lado, te recomiendo usar las constantes que vienen en la clase Response para cada uno de los códigos de respuestas, por ejemplo:
abort(\Response::HTTP_NOT_FOUND)
. Es buena practica utilizar constantes en vez de valores. La lista completa de constantes la podes ver en: https://github.com/symfony/http-foundation/blob/master/Response.php - Podemos personalizar nuestro mensaje enviando una cadena de texto como segundo parámetro. Para esto, debemos sobrescribir nuestro archivo
404.blade.php
para asignar la variable$message
.
Responder con vistas gracias al helper view.
No hay mucho para decir del helper view()
pero a simple vista, no parece una función de respuestas HTTP como las anteriores, pero en el fondo de su código termina devolviendo una instancia de la clase Response con la asignación de la vista, como contenido.
¿Dónde definir las respuestas?
Las respuestas se pueden definir en las rutas que no es muy recomendable ya que no te permite guardar en cache el archivo de rutas. Lo mas común y lógico es definir los helpers mencionados en los Controllers. Pero hay una tercer forma que es mas elegante, flexible y es utilizando clases Responsables de Laravel.
Conclusión
Hicimos un repaso sobre que son los Responses en Laravel, sus helpers y dimos algunos tips que te podrían ayudar con tus desarrollos. Espero que te haya servido este artículo y nos vemos en la próxima.
Excelente post
Gracias por el post.
Tengo un problema, cuando me logueo en mi app laravel, reviso los header, veo que efectivamente se carga la ruta login, uno de los headers de esta ruta es Form Data y veo allí mis credenciales de acceso. Es Status Code: 302 Found