Ultima Laravel
Share
Explore
Enrutamiento

icon picker
Las respuestas

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.
https://laravel.sillo.org/wp-content/uploads/2020/09/Capture-16.png
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:
text / html : página Html clásica
texto / sin formato: texto simple sin formato
aplicación / pdf : archivo pdf
application / json : datos en formato JSON
application / octet-stream : descarga de archivos
Ahora veamos cómo se ve si devolvemos una matriz:
Route::get('test', function () {
return ['uno', 'dos', 'tres'];
});
Esta vez recibimos una respuesta JSON:
0: ’uno’
1:’ dos’
2: ’tres’
https://laravel.sillo.org/wp-content/uploads/2020/09/Capture-18.png
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) .
Route::get('test', function () {
return response('un test', 206)->header('Content-Type', 'text/plain');
})
Esta vez impongo un código (206: envío parcial) y un tipo MIME (texto / plano):
https://laravel.sillo.org/wp-content/uploads/2020/09/Capture-19.png
En el protocolo HTTP hay códigos para especificar respuestas. Estos códigos se clasifican en categorías amplias. Estos son los principales:
200 : consulta ejecutada con éxito,
403 : recurso prohibido,
404 : no se encontró el recurso solicitado,
503: servidor no disponible.
De hecho, rara vez necesitará especificar los encabezados porque Laravel lo hace muy bien, pero puede ver que es fácil de hacer.
También puede agregar una cookie con el método de cookie.

Response

Podemos reenviar la respuesta de diferentes modos:
Reenvió a una ruta concreta:
//fichero de rutas:
//ruta destino con nombre definido

Route::get('destino/{sitio}', function ($sitio) {
return "Destino: $sitio";
})->name('destino');
Reenvío a rutas con nombre o con URL:
//código en el una fichero de rutas pero que podría ir en el controlador:
//reenvío ordinario por la URL

Route::get('teruel', function () {
return redirect('/destino/Teruel');
});

//reenvío por nombre
Route::get('zaragoza', function () {
return redirect()->route('destino', ['sitio' => 'Zaragoza']);
});
Reenvío a la misma ruta de la que venimos, e incluso añadir mensajes de error:
//redirección simple:
return Redirect::back();

//igual pero con errores
return Redirect::back()->withErrors(['msg', 'The Message']);

//en la vista podríamos hacer:

@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
Reenviar a un método de un controlador:
//a un método sin argumentos
return redirect()->action('HomeController@index');

//con argumentos
return redirect()->action(
'UserController@profile', ['id' => 1]
);

Las vistas

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:

image.png
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:
image.png

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:
image.png
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:
image.png
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í:
return view('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:



Diferencias asset() , url(),route()

Decidir qué usar

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.

Genera una URL absoluta a la ruta dada

Úselo para direcciones URL estáticas (que deberían ser raras).
Acepta una matriz de parámetros que se codifican y agregan al final del dominio.
Conserva cualquier .

url()- Generar una URL a una ruta .

el método url() utilizado para generar una url a un enlace,

Genera una URL a una aplicación asset

Úselo para archivos que se sirven directamente, como CSS, imágenes, javascript.
Sólo acepta una ruta directa.
ejemplos:


Los archivos deben estar ubicados en la carpeta pública.

Obtiene la URL de una ruta con nombre

Úselo para cada ruta (cada ruta debe tener un nombre para ayudar a los cambios de ruta a prueba de futuro).
Requiere .
Acepta matriz asociativa para parámetros de ruta.
Permite anular la ruta relativa frente a la ruta absoluta (predeterminado).
URL::route obtiene la URL de una ruta con nombre. Entonces, en su caso, si nombra su ruta así:
entonces podrás usar en plantillas Blade.
Share
 
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.