Rutas, argumentos, vistas y métodos HTTP en Laravel

- Andrés Cruz

In english
Rutas, argumentos, vistas y métodos HTTP en Laravel

Las rutas, son un esquema flexible que tenemos para vincular una URI a un proceso funcional; y este proceso funcional, puede ser:

  1. Un callback, que es una función local definida en las mismas rutas.
  2. Un controlador, que es una clase aparte.
  3. Un componente, que es como un controlador, pero más flexible.

Si revisamos en la carpeta de routes; veremos que existen 4 archivos:

  1. api: Para definir rutas de nuestras Apis Rest.
  2. channels: Para la comunicación fullduplex con los canales.
  3. console: Para crear comandos con artisan.
  4. web: Las rutas para la aplicación web.

El que nos interesa en este capítulo es el de web.php; el cual permite definir las rutas de nuestra aplicación web (las que nuestro cliente consume desde el navegador).

Las rutas en Laravel son un elemento central que nos permiten enlazar controladores, como poder desencadenar nuestros propios procesos; es decir, las rutas no necesitan de los controladores para poder presentar un contenido; y por ende, es el primer enfoque que vamos a presentar.

Si te fijas, tenemos una ruta ya definía:

Route::get('/', function () {

    return view('welcome');

});

Que como puedes suponer es la que nosotros vemos por pantalla nada más al arrancar la aplicación como la figura 2-1.

Fíjate, que se emplea una clase llamada Route, que se importa de:

use Illuminate\Support\Facades\Route;

Que es interna a Laravel y se conocen como Facades.

Los Facades no son más que clases que nos permiten acceder a servicios propios del framework mediante clases estáticas.

Finalmente, con esta clase, usamos un método llamado get(); para las rutas tenemos distintos métodos, tantos métodos como tipo de peticiones tenemos:

  • POST crear un recurso con el método post()
  • GET leer un recurso o colección con el método  get()
  • PUT actualizar un recurso con el método  put()
  • PATCH actualizar un recurso con el método patch()
  • DELETE eliminar un recurso con el método delete()

En este caso, empleamos una ruta de tipo get(), que conlleva a emplear a una petición de tipo GET.

El método get(), al igual que el resto de las funciones señaladas anteriormente, reciben dos parámetros:

Route::<FunctionResource>(URI, callback)

  1. URI de la aplicación.
  2. El callback viene siendo la función controladora, que en este caso es una función, pero puede ser la referencia a la función de un controlador o un componente.

Y donde "FunctionResource" es la method get(), post(), put(), patch() o delete().

En el ejemplo anterior, el “/“ indica que es el root de la aplicación, que es:

http://larafirststeps.test/

O localhost si empleas MacOS o Linux mediante Docker. 

En este caso, la parte funcional, viene siendo una función anónima; esta función, puede hacer cualquier cosa, devolver un JSON, un HTML, un documento, enviar un email y un largo etc.

En este ejemplo, devuelve una vista; para devolver vistas se emplea la función de ayuda (helper) llamada view(), la cual referencia las vistas que existen en la carpeta de:

resources/views/<Views and/or Folder>

Por defecto, solamente existe un único archivo; el llamado welcome.blade.php, y si, es el que estamos reverenciando en la ruta anterior con:

return view('welcome');

Fíjate, que no es necesario ni indicar la ruta, ni la extensión de blade o php.

Blade hace referencia al motor de plantillas que tiene Laravel que hablaremos sobre él un poco más adelante.

Si revisas la vista de welcome.blade.php:

Verás que todo el HTML de la misma:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>
***

En el que vemos por el navegador algo como la figura 2-1.

Así que, si creamos unas rutas más:

Route::get('/writeme', function () {
    return "Contact";
});

Route::get('/contact', function () {
    return "Enjoy my web";
});

Y vamos a cada una de estas páginas, respectivamente:

Ejemplo ruta 1
Ejemplo ruta 1

Y

Ejemplo ruta 2
Ejemplo ruta 2
Route::get('/custom', function () {
    $msj2 = "Msj from server *-*";
    $data = ['msj2' => $msj2, "age" => 15];
    return view('custom', $data);
 });

views/cursom.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>{{ $msj2 }}</p>
    <p>{{ $age }}</p>
</body>
</html>
Ejemplo ruta 3
Ejemplo ruta 3

Rutas con nombre

Otra configuración que no puede faltar en tu aplicación, es el uso de rutas con nombre; como indica su nombre, le permite definir un nombre a una ruta.

***
Route::get('/contact', function () {
    return "Enjoy my web";
})->name('welcome');

Para eso se emplea una función llamada name() a la cual se le indica el nombre; para emplearla en la vista:

<a href="{{ name('welcome') }}">Welcome</a>

Esto es particularmente útil, ya que, puedes cambiar la URI de la ruta, agruparla o aplicarle cualquier otra configuración, pero, mientras tengas el nombre definido en la ruta y uses este nombre para referenciarla, Laravel va a actualizarla automáticamente.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.