En esta lección hablaremos sobre la generación de URLs y aprenderemos a mejorar la capacidad de enlace entre nuestras páginas o acciones para facilitar el mantenimiento de nuestra aplicación.

Mira el código en GitHub: actual, resultado, comparación.

Colocar URL estáticas en nuestras plantillas nos puede traer problemas cuando realicemos el despliegue de nuestra aplicación al entorno de producción o si queremos cambiar la estructura de URLs en nuestra app. Por lo tanto, es preferible utilizar el helper url que provee Laravel. Este helper nos permite autocompletar la URL absoluta, incluyendo si se trata del protocolo HTTP o HTTPS, automáticamente por nosotros.

{{ url('/ruta') }}

En nuestro listado de notas, podemos encontrar enlaces para editar y eliminar cada nota. Podríamos intentar agregar una URL al enlace de editar cada nota:

<a href="notas/{$id}/editar">Editar</a>

Puesto que aún no tenemos un ID real, podemos hacer uso de la variable loop que Laravel incluirá automáticamente por nosotros cada vez que utilicemos directivas como @foreach o @forelse para agregar un número único a cada botón de editar:

<a href="notas/{{ $loop->iteration }}/editar">Editar</a>

Haciendo uso de $loop podemos generar URLs diferentes para cada nota, los cuales reemplazaremos luego con el ID real.

Sin embargo, qué pasaría si decidiéramos cambiar las URLs en nuestra aplicación por cualquier razón, por ejemplo, cambiar el idioma de español a inglés. Si lo hiciéramos manualmente probablemente veríamos un error 404, y tendríamos que actualizar manualmente cada vista de nuestra aplicación, lo cual puede ser un trabajo bastante tedioso y propenso a errores.

En una aplicación compleja con cientos de plantillas, actualizar todas las URLs de forma manual podría resultar bastante arduo.

Laravel tiene una solución para ello: el uso de rutas con nombres, que permiten referenciar una ruta por su nombre en lugar de su URL.

Route::get('/notes', function () {
    // Contenido de nuestra ruta
})->name('notes.index');

Ya que le hemos dado un nombre a nuestra ruta, podemos hacer referencia a ella por su nombre en nuestras plantillas utilizando el helper route.

<a href="{{ route('notes.index') }}">Ver notas</a>

También podemos generar rutas que incluyan parámetros, por ejemplo, agregamos el nombre a la ruta con parámetros:

Route::get('notas/{id}/editar', function ($id) {
    return 'Aquí podremos editar la nota: '.$id;
})->name('notes.edit');

Luego generaremos la URL utilizando el mismo helper route pasando el o los parámetros como segundo argumento:

<!-- notes.blade.php -->
<a href="{{ route('notes.edit', ['id' => $id]) }}">Editar</a>
Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Layouts con Laravel 10 y componentes de Blade Lección siguiente Creación de tablas con el sistema de migraciones en Laravel 10