Enrutamiento

icon picker
Las respuestas

Las rutas procesan la solicitud entrante. Ahora veamos las respuestas que podemos enviar al cliente. Veremos el sistema de visualización de Laravel con la capacidad de pasar parámetros. También veremos cómo crear plantillas con la herramienta Blade.

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:
https://laravel.sillo.org/wp-content/uploads/2020/09/Capture-17.png
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 que hereda de la de Symfony: Symfony \ Component \ HttpFoundation \ 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:
Reenvio 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]
);


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.