Saltar a contenido

Rutas

Las rutas (routes) son un mecanismo que permite a Laravel establecer qué respuesta enviar a una petición que intenta acceder a una determinada URL. Estas rutas se especifican en diferentes archivos dentro de la carpeta routes de nuestro proyecto Laravel.

Podríamos decir que existen dos tipos principales de rutas:

  • Las rutas web (almacenadas en el archivo routes/web.php de la aplicación), que nos permitirán cargar distintas vistas en función de la URL que indique el cliente.
  • Las rutas API (almacenadas en el archivo routes/api.php), a través de las cuales definiremos distintos servicios REST, como veremos también más adelante.

En esta UT nos vamos a centrar en el primer grupo, por lo que editaremos el contenido del archivo routes/web.php. Estas rutas son las más habituales, y se utilizan para recuperar contenidos típicamente en formato HTML.

Inicialización de las rutas

Inicialmente ya existe una ruta predefinida hacia la raíz del proyecto, que carga la página de bienvenida al mismo:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

/* Vista dentro de una carpeta */

Route::get('/admin', function () {
    return view('admin/index');
});

Clase Route

En Laravel, las rutas no son más que una instancia de la clase Routeque vinculamos a una URI y a la que le pasamos una serie de funciones o métodos. Las rutas pueden ser usadas para realizar:

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

En la carpeta routes se pueden generar cuatro archivos:

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

Principales tipos de rutas

El que más nos interesa es el de web.php ya que es el que nos 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, es por ello que existen los siguiente tipos:

  • Route::get($uri, $callback);
    Define una ruta que responde a peticiones HTTP GET. Se utiliza comúnmente para mostrar recursos o páginas.
    Ejemplo: Mostrar una lista de usuarios o un formulario.

  • Route::post($uri, $callback);
    Define una ruta que responde a peticiones HTTP POST. Se emplea para enviar datos al servidor, como formularios o creación de recursos.
    Ejemplo: Procesar el formulario de registro de usuario.

  • Route::put($uri, $callback);
    Define una ruta que responde a peticiones HTTP PUT. Se usa para actualizar completamente un recurso existente.
    Ejemplo: Actualizar todos los datos de un perfil de usuario.

  • Route::patch($uri, $callback);
    Define una ruta para peticiones HTTP PATCH. Se utiliza para actualizar parcialmente un recurso.
    Ejemplo: Modificar solo el correo electrónico de un usuario.

  • Route::delete($uri, $callback);
    Define una ruta que responde a peticiones HTTP DELETE. Sirve para eliminar un recurso.
    Ejemplo: Borrar un registro de usuario.

  • Route::options($uri, $callback);
    Define una ruta que responde a peticiones HTTP OPTIONS. Se usa para consultar qué métodos HTTP están permitidos en un recurso.
    Ejemplo: Responder a peticiones CORS desde el cliente.

Para profundizar en su uso puedes visitar la documentación .

Trabajando con rutas

Laravel proporciona un sistema de enrutamiento muy flexible y expresivo, que permite definir cómo deben responder las URLs de nuestra aplicación a las distintas peticiones del cliente. Existen diferentes formas de trabajar con rutas: directamente desde el fichero de rutas, asignándoles un nombre, pasándoles parámetros o gestionando redirecciones. Dominar estas opciones es fundamental para estructurar correctamente la lógica de navegación y acceso a los recursos de nuestra aplicación.

Nombrando la ruta

En ocasiones puede ser conveniente asociar un nombre a una ruta. Especialmente, cuando esa ruta va a formar parte de un enlace en alguna página de nuestro sitio, ya que en un futuro la ruta podría cambiar, y de este modo evitamos tener que actualizar los enlaces con el nuevo nombre.

Para ello, al definir la ruta, le asociamos con la función name el nombre que queramos:

<?php
Route::get('contacto', function() {
    return "Página de contacto";
}) -> name('ruta_contacto');

Ahora, si queremos definir un enlace a esta ruta en cualquier parte, basta con emplear la función route de Laravel, indicando el nombre que le hemos asignado a esta ruta. Por lo tanto, en lugar de poner esto:

<a href="/contacto">Contacto</a>';

Podemos hacer algo como esto otro, tal y como veremos más adelante cuando definamos nuestras vistas:

<a href="{{ route('ruta_contacto') }}">Contacto</a>

De este modo, ante futuros cambios en las rutas, sólo deberemos cambiar la URL en el correspondiente Route::get de routes/web.php.

Rutas con parámetros

Ya hemos visto que con PHP podemos pasar parámetros a través de la URL, como si fueran variables, que las recuperábamos a través del método GET o POST. on Laravel también podemos introducir parámetros pero de una forma más vistosa y ordenada, de tal manera que sea visualmente más cómodo de recordar y de indexar por los motores de búsqueda como Google.

Para configurar este tipo de rutas en nuestro archivo de rutas public/routes/web.php haremos lo siguiente.

<?php

Route::get('cliente/{id}', function($id) {
    return('Cliente con el id: ' . $id);
});

Pero esto nos daría un error 404 si el parámetro $id no existiera, para resolver ésto, podemos definir una ruta por defecto en caso de que el id (o parámetro) no sea pasado. Para ello usaremos el símbolo ? en nuestro nombre de ruta e inicializaremos la variable con el valor que queramos.

<?php

Route::get('cliente/{id?}', function($id = 1) {
    return ('Cliente con el id: ' . $id);
});

Ahora tenemos otro problema, porque estamos filtrando por id del cliente que, normalmente es un número, pero si metemos un parámetro que no sea un número, vamos a obtener un resultado no deseado.

Para resolver este caso haremos uso de la cláusula where junto con una expresión regular numérica.

<?php

Route::get('cliente/{id?}', function($id = 1) {
    return ('Cliente con el id: ' . $id);
}) -> where('id', '[0-9]+');

Además, podemos pasarle variables a nuestra URL para luego utilizarlas en nuestros archivos de plantillas o en archivos .phphaciendo uso de un array asociativo. Veamos un ejemplo con la forma reducida para ahorrarnos código.

<?php

Route::view('datos', 'usuarios', ['id' => 5446]);

Redirecciones

Muchas veces necesitamos mandar de una página a otra, ya sea porqué la página que está intentando ingresar el usuario no está disponible, o porqué la función en sí no devuelve una vista. Para hacer las redirecciones tenemos tres formas:

  • Con una redirección directa al URI:

    <?php
    return redirect("/post/create"); 
    
  • Una instancia de redirect, que nos permite redireccionar con la ruta con nombre:

    <?php
    return redirect()-›route("post.create");
    
  • En Laravel 9 se introdujo to_route() que redirecciona a una ruta con nombre, como el caso anterior, pero con una sintaxis más sencilla.

    <?php
    return to_route("post.index");
    

Actividades

Instalaciones realizadas

Recuerda las instalaciones y configuraciones previas que realizaste durante la Actividad de Clase 704, ya que muchas de ellas —como la instalación de Composer, Laravel y la configuración del entorno de desarrollo— son fundamentales para poder continuar con los ejercicios actuales sin problemas de compatibilidad o ejecución.

  • 📝 AC 705. (RA8 / CE8c CE8d CE8g / IC1 / 3p) - Uno de tus proyectos a realizar es una lista de tareas o to-do list para aplicar la metodología GTD. Piensa la estructura de rutas que te va a hacer falta en tu proyecto y genera las rutas necesarias. La aplicación no debe tener en principio parte de administración pues es para tu uso personal.

    GTD

    Getting Things Done (GTD) es un método de gestión de tareas o actividades. Se basa en el principio de que una persona necesita liberar su mente de las tareas pendientes guardándolas en un lugar específico.

  • ⚓ AR 706. (RA8 / CE8c CE8d CE8g / IC1 / 3p) - En otro proyecto, crea las rutas necesarias para poder realizar un blog y poder gestionarlo. Un blog tiene una parte de administración y un frontal en el que se muestran los post.

  • 🧪 PR 707. (RA8 / CE8c CE8d CE8g / IC2 / 5p) - Tu CTO está muy contento de que puedas usar un framework para generar la herramienta de e-commerce que le han solicitado. Para ello, has de crear las rutas necesarias para que la empresa pueda vender cursos de formación. Te recomienda prestar atención a todas las posibilidades que se puedan dar en este tipo de proyecto, pues ha de usarlo ua persona que no tenga muchos conocimientos informáticos