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:
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’
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):
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, 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:
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í:
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()
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. {{ url('search') }}
// http://www.example.com/search
{{ url('search', ['qevo', 'laravel']) }}
// http://www.example.com/search/qevo/laravel
url()- Generar una URL a una ruta .
el método url() utilizado para generar una url a un enlace,
{{ url('users', ['page' => 22], $secure = null)
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. {{ asset('css/app.css') }}
// http://www.example.com/css/app.css
ejemplos:
<img alt="logo" src="{{ asset('images/logo.png') }}">
<link href="{{ asset('css/min.css') }}" rel="stylesheet">
<script src="{{ asset('use.typekit.net/zjb5wvv.js') }}"></script>
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). Acepta matriz asociativa para parámetros de ruta. Permite anular la ruta relativa frente a la ruta absoluta (predeterminado). {{ route('user.profile', ['name'=>'qevo']) }}
// http://www.example.com/user/qevo/profile
{{ route('user.profile', ['name'=>'qevo'], false) }}
// /user/qevo/profile
URL::route obtiene la URL de una ruta con nombre. Entonces, en su caso, si nombra su ruta así:
Route::get('/account/register', [
'name' => 'register',
'uses' => 'RegisterController@create'
]);
entonces podrás usar en plantillas Blade.
<a href="{{ URL::route('register') }}" >Register 1</a>
Otros helpers
Nuevos helpers
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:
$string = str('Taylor')->append(' Otwell');
// 'Taylor Otwell'
Si no se proporciona ningún argumento a la función str, la función devuelve una instancia de Illuminate\Support\Str:
$snake = str()->snake('LaravelFramework');
// 'laravel_framework'
Ejemplo
// Sin helper
Str::of('hola mundo')->upper();
// Con helper