Laravel Sluggable

Laravel Sluggable
Solucionex
15
May 26

Si has trabajado con Laravel, seguro que en algún momento has tenido que generar un slug para una URL: convertir "Nuevo artículo" en "nuevo-articulo" para que se vea bonito en la barra del navegador. Suena fácil, y al principio lo es, pero en cuanto la aplicación crece empiezan a aparecer detalles incómodos: títulos repetidos, caracteres raros, idiomas que no son el inglés, slugs que deben ser únicos solo dentro de un equipo…

Laravel Sluggable, paquete publicado por Nuno Maduro, está pensado para resolver todo eso de una vez sin que tengas que escribir lógica extra en cada modelo.

 

Instalación

Solo necesitas dos cosas PHP 8.5 y Laravel 13.5 o superior. El paquete es nuevo por lo que no está disponible en versiones anteriores de Laravel. Para instalar, necesitaremos Composer:

composer require nunomaduro/laravel-sluggable

Y para preparar el modelo, tenemos un comando Artisan que nos lo deja prácticamente hecho:

php artisan make:sluggable Post

Este comando añade el atributo #[Sluggable] al modelo y genera la migración para crear la columna slug. No está de más revisar la migración antes de ejecutarla. Después, lanzamos php artisan migrate.

También, cabe destacar, que podemos añadir las opcciones --from y --to.

php artisan make:sluggable Post --from=headline --to=url_slug

A partir de este momento, los slugs se generarán automáticamente.

 

Cómo se usa

La configuración reside dentro del propio atributo:

use NunoMaduro\LaravelSluggable\Attributes\Sluggable;

#[Sluggable(from: 'title')]
class Post extends Model
{
}

Si se necesita algo más concreto, el atributo admite varias opciones para indicar de qué columnas sacar el slug, dónde guardarlo, longitud máxima, etc.

 

Conclusión

Si estás empezando un proyecto nuevo con Laravel 13.5 o superior, es uno de esos paquetes que merece la pena instalar desde el primer día. Y si llevas tiempo arrastrando tu propia lógica de slugs hecha a mano, quizá sea un buen momento para sustituirla por algo más sencillo.

 

Fuentes: Repositorio oficial de Laravel Sluggable

laravel