Las rutas procesan la solicitud entrante. Ahora veamos las respuestas que podemos enviar al cliente.
Cuando devolvemos datos en forma de página web, o hacemos redirecciones por poner otro ejemplo, estamos usando el sistema response.
Las responses son las "respuestas" que nos debe devolver Laravel ante cualquier solicitud que se realice al servidor. Según la documentación oficial "Cualquier ruta [del sistema de routing] y controlador debe devolver algún tipo de respuesta al navegador del usuario". Existen diversos modos de devolver respuestas ..
Respuestas automáticas
Ya creamos respuestas cuando vimos el enrutamiento, pero no hicimos nada especial para eso, solo devolvimos una cadena como respuesta. Por ejemplo, si usamos esta ruta:
Route::get('test', function () {
return 'un test';
});
Interceptamos la url http: // misitio/ test y devolvemos la cadena "un test". Pero, por supuesto, Laravel detrás de escena crea una respuesta HTTP real.
Nos damos cuenta de que tenemos una solicitud completa con sus encabezados, pero no podemos intervenir en estos valores. Tenga en cuenta de paso que tenemos cookies, hablaremos de ellas nuevamente cuando veamos las sesiones.
El tipo de contenido indica el tipo MIME del documento devuelto, por lo que el navegador sabrá qué hacer con el documento según la naturaleza de su contenido. Por ejemplo:
Entonces, si desea devolver JSON, simplemente devuelva una matriz y ¡Laravel se encarga de todo!
Construir una respuesta
El funcionamiento automático es bueno, pero a veces queremos imponer valores. En este caso, debe usar una clase de Laravel para construir una respuesta. Como la mayoría de las veces tenemos un ayudante que nos evita declarar la clase en cuestión (en este caso es la clase Illuminate \ Http \ Response) .
En una aplicación real, rara vez devolverá la respuesta directamente desde una ruta, al menos pasará por una vista. En su versión más simple, una vista es un archivo simple con código HTML:
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mi primera vista</title>
</head>
<body>
Soy una vista
</body>
</html>
Debes guardar esta vista (elegí el nombre “vue1”) en la carpeta de recursos/vistas con la extensión php:
Incluso si solo coloca el código Html en una vista, debe registrarlo con la extensión php.
Podemos llamar a esta vista desde una ruta con este código:
Route::get('/', function() {
return view('vue1');
});
Para que funcione comente o elimine la ruta base de la instalación.
Aquí hay una ilustración del proceso:
Vista parametrizada
En general, tenemos información para transmitir a una vista, ahora veamos cómo configurar esto. Supongamos que queremos responder a este tipo de solicitud:
http: //monsite.fr/article/n
El parámetro n puede tomar un valor numérico. Veamos cómo se compone esta url:
la base de la url es constante para el sitio, sea cual sea la solicitud,
la parte fija aquí corresponde a los artículos,
la parte variable corresponde al número del elemento deseado (el parámetro).
Route
Necesitamos una ruta para interceptar estas URL:
Route::get('article/{n}', function($n) {
return view('article')->with('numero', $n);
})->where('n', '[0-9]+');
Pasamos la variable a la vista con el método with .
Vista
Ahora solo tenemos que crear la vista article.php en la carpeta resources/views :
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Les articles</title>
</head>
<body>
<p>C'est l'article n° <?php echo $numero ?></p>
</body>
</html>
Para recuperar el número de artículo, use la variable $numero .
Aquí hay un diagrama de cómo funciona:
Hay un método "mágico" para pasar un parámetro, por ejemplo, para pasar la variable $number como hice anteriormente, podemos escribir el código así:
returnview('article')->withNumero($n);
Simplemente concatene el nombre de la variable con la palabra clave with .
También puede pasar una matriz como parámetro:
return view('article', ['numero' => $n]);
Blade
Laravel tiene un elegante motor de plantillas llamado Blade que nos permite hacer muchas cosas. El primero es simplificar la sintaxis para nosotros. Por ejemplo en lugar de la siguiente línea que proporcionamos en la vista anterior:
< p > Este es el ítem # <?php echo $número ?> </ p >
Puede usar esta sintaxis con Blade:
< p > Este es el artículo número {{ $número }} </ p >
Todo lo que está entre llaves dobles se interpreta como código PHP. Pero para que funcione tienes que decirle a Laravel que quieres usar Blade para esta vista. Esto se hace simplemente cambiando el nombre del archivo:
Considere el tipo de URL que se necesita/cómo se utiliza la URL. Una de las ventajas de tener métodos auxiliares separados para cada tipo de URL es que pueden tener una lógica de manejo diferente.
Por ejemplo, los activos (por ejemplo, CSS, imágenes, etc.) podrían implicar una verificación de que el archivo existe en el sistema de archivos, pero no requieren el tipo de análisis que requeriría una ruta porque la ruta puede tener parámetros.
Laravel 9.x presenta dos funciones helpers nuevas y convenientes que puede usar en su propia aplicación.
str
La función str devuelve una nueva instancia de Illuminate\Support\Stringable para el string dado.
Esta función es equivalente al método Str::of:
Si no se proporciona ningún argumento a la función str, la función devuelve una instancia de Illuminate\Support\Str:
Ejemplo
to_route
La función to_route genera una respuesta HTTP de redirección para una ruta con nombre determinada, lo que proporciona una forma expresiva de redirigir a rutas con nombre desde sus rutas y controladores:
Si es necesario, puede pasar el código HTTP que debe asignarse a la redirección y cualquier encabezado de respuesta adicional como el tercer y cuarto argumento del método to_route: