Concetpo de rutas

Las rutas son determinan cómo se deben manejar las solicitudes HTTP a tu aplicación .
Especifican qué acción se debe tomar cuando se accede a una URI específica, conectando URLs con el código que genera las respuestas a esas URLs.
En ellas, podemos ver cómo las reglas que determinan cómo se responde a cada petición entrante a tu aplicación web.
Directorio Routes
La carpeta routes en un proyecto Laravel es crucial, ya que en los fichero que contiene, se van a definir cómo tu aplicación responde a las solicitudes HTTP
Después de una instalación estándar, tedremos dos ficheros:

- web.php
En él, se definen las rutas accesibles a través del navegador, gestionando solicitudes GET, POST, PUT, PATCH, DELETE, OPTIONS. Tendremos otros métodos disponibles, según se verán.
Aquí puedes agrupar rutas, asignarles middleware para control de acceso, y vincularlas a controladores que manejan la lógica de la aplicación.- console.php
Este archivo es donde defines todas las rutas CLI (Command Line Interface) o comandos de Artisan (comando que ejecutaremos desde el terminal para interactuar con nuestra aplicación
Contenido
En el fichero de rutas usaremos simpre la facade Route Es una Interfaz estática que va a permitir invocar a los diferentes métodos para que nuestra aplicación ofrezca recursos web. La idea es establecer ante una solicitud establecer una acción :
En la imagen siguiente especificamos con más detelle el contenido
Routing
Routing vs Url
- Una aplicación web es invocada mediante una solicitud HTTP, usando sus verbos GET o POST principalmente.
- Para ello solicitamos un recurso mediante lo que comúnmente llamamos URL.
- En las aplicaciones que venimos desarrollando en el curso, el proceso de ejecución de la solicitud de un recurso web, de forma básica, es:
- El cliente escribe una URL solicitando una página web o PHP. Por ejemplo:
|
|
- Ahora el servidor web procesa la petición ejecutando el fichero PHP y retornando una página web al cliente.
Nota
Entendemos que existe un fichero en el servidor con el nombre paginaPrincipal.php.- Es esta la primera diferencia que podemos encontrar con una aplicación web tradicional de PHP, como hemos trabajado en el curso.
- Ahora no vamos a funcionar exactamente así en la parte del servidor.
Con el routing, vamos a especificar los diferentes recursos que nuestra aplicación va a atender como solicitudes HTTP. Esto se hará en un único fichero donde se especifican estas rutas: web.php, de modo que todo lo relacionado con las rutas esté ahí especificado:
/routes/web.php
- En la versión 12 de Laravel, el archivo principal de rutas es routes/web.php. Las rutas de API o canales se gestionan de forma diferente y están en los ficheros separados como api.php o channels.php.
Contenido de web.php
- El proceso quedará definido por la siguiente secuencia:
- El cliente escribirá una ruta a la que quiere acceder en forma de URL.
- La aplicación buscará dicha ruta en el fichero web.php.
- Hay diferentes maneras de especificar estas rutas en el fichero web.php, como veremos a continuación.
Levantando el servidor
- Antes de probar las rutas, debemos poner nuestro servidor en funcionamiento. Para ello, cada proyecto tiene un pequeño servidor interno que nos permite probar en local sin necesidad de depender de Apache.
- Primero levantamos el servidor que viene con Laravel en el puerto 8000.
- Usamos los comandos de Artisan:
|
|
Si estamos usando Docker, debemos indicar que el navegador o la solicitud pueda hacerse desde cualquier host con la opción --host 0.0.0.0:
|
|
Tip
Artisan viene de “artesano” y es un poderoso interfaz de comandos que nos permite realizar muchas acciones rápidamente en nuestro proyecto.Al ejecutar el comando, vemos la siguiente salida, que responde al route con la URL /:
|
|
- Ahora abrimos el navegador y escribimos
http://localhost:8000, obteniendo una vista similar a esta:
= Especificando la ruta en Laravel =
Para ello se usa la clase Router. Más información:
Usamos lo que en Laravel se conoce como Facade.
De esta forma no tendremos que instanciar un objeto de la clase Router. La clase cuenta con una serie de métodos para especificar las rutas según el tipo de solicitud HTTP que se hace al servidor.
Por ejemplo:
|
|
- También podemos tener métodos más flexibles:
|
|
== Routing básico: funciones anónimas o closures ==
-
En este caso, la acción básica será una función anónima o closure.
-
Una función de closure es una función sin nombre (anónima) que se ejecutará y puede retornar algún valor.
-
Ejemplo: dotamos a nuestra aplicación del recurso o ruta llamada “primera”:
|
|
- También funciona con
echo:
|
|
- Podemos devolver una vista o página HTML. Para ello, creamos una vista:
- Usa un gestor de plantillas llamado Blade.
- Los ficheros tienen extensión
.blade.php. - Se ubican en /resources/views.
- Son ficheros HTML.
- Ejemplo básico: Creamos la vista prueba.blade.php:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Esto es una prueba</h1>
</body>
</html>
- Agregamos la ruta:
|
|
- También podemos usar el método
viewdirectamente:
|
|
Práctica: rutas básicas
Instrucciones de práctica
Routing parametrizado
-
Laravel permite que las rutas incluyan parámetros, los cuales se pasan a las funciones como argumentos.
-
Ejemplo básico:
|
|
-
Los parámetros en las rutas se indican entre llaves
{}. Laravel inyecta automáticamente el valor del parámetro en la función. -
Ejemplo con varios parámetros:
|
|
Parámetros con valores por defecto
- Si un parámetro no es obligatorio, podemos asignarle un valor por defecto:
|
|
###Práctica: rutas parametrizadas
Instrucciones de práctica
Restricciones y validación de parámetros
-
Podemos usar expresiones regulares para restringir los valores permitidos en los parámetros.
-
Ejemplo restringiendo a números:
|
|
- También se pueden aplicar múltiples restricciones:
|
|
- Laravel incluye helpers para simplificar estas restricciones:
|
|
Parámetros opcionales con validación
- Es posible combinar parámetros opcionales con restricciones:
|
|
Práctica: restricciones y validación
Instrucciones de práctica
Nomenclatura de rutas
-
Podemos asignar nombres a las rutas para facilitar su referencia en la aplicación.
-
Ejemplo de nombrado de rutas:
|
|
- Con el nombre asignado, podemos generar URLs dinámicamente:
|
|
- También es posible redirigir a una ruta nombrada:
|
|
Práctica: nomenclatura de rutas
Instrucciones de práctica
Route::fallback() en Laravel
¿Qué es?
Route::fallback() define una ruta de respaldo que se ejecuta cuando ninguna otra ruta coincide con la petición actual.
En otras palabras:
Se ejecuta cuando el usuario accede a una URL que no existe en el sistema de rutas.
Es una forma controlada de gestionar el error 404 desde el propio archivo web.php.
Debe colocarse siempre al final del fichero de rutas.
, Laravel busca las coincidencias de rutas en orden; si se coloca al principio o en medio, fallback() actuaría como comprobación para cualquier ruta y no llegaría a analizar las que estén definidas después.
Ejemplo básico
Route::fallback(function () {
$url = request()->url(); // URL completa
$path = request()->path(); // Solo el path
return "<h1>La ruta {$path} no existe</h1>";
});Obtener información de la petición
Dentro del fallback() puedes usar el helper request().
$url = request()->url();Ejemplo resultado:
http://misitio.test/ruta-inexistente
Solo el path
$path = request()->path();Ejemplo resultado:
ruta-inexistente
Obtener el nombre de la ruta
Si quieres obtener el nombre de la ruta actual:
$routeName = request()->route()?->getName();Sin embargo, en un fallback() normalmente no existirá nombre de ruta,
porque precisamente no ha coincidido ninguna.
Por eso es recomendable usar:
$routeName = optional(request()->route())->getName();Si no existe ruta, devolverá null.
Ejemplo más completo
Route::fallback(function () {
$url = request()->url();
$path = request()->path();
$routeName = optional(request()->route())->getName();
return response()->view('errors.custom404', [
'url' => $url,
'path' => $path,
'routeName' => $routeName
], 404);
});Resumen conceptual
Route::fallback()→ Captura cualquier URL no definida.request()->url()→ Devuelve la URL completa.request()->path()→ Devuelve solo la ruta.request()->route()?->getName()→ Devuelve el nombre de la ruta si existe.- Es recomendable devolver código HTTP 404 y usar una vista personalizada.
Es una herramienta muy útil para controlar errores de navegación de forma elegante dentro del sistema de rutas de Laravel.