Contenido del curso
Diseño de un foro
- 5

Flujo completo de Laravel: ruta, controlador, modelo y vista
07:55 min - 6

Diseño home en Laravel con Tailwind CSS
09:48 min - 7

Desarrollo de página de detalles con rutas dinámicas en Laravel
07:43 min - 8

Creación de componentes Blade para plantillas reutilizables en Laravel
07:11 min - 9

Pregunta con respuestas dinámicas en Laravel
05:19 min - 10

Relaciones polimorfas para comentarios en Laravel
06:33 min
Livewire
Optimización
CRUD
Detalles finales
URLs limpias con slugs en Laravel
Resumen
Las direcciones de tu aplicación también comunican. Cuando trabajas con Laravel, implementar URLs limpias y legibles con slugs mejora la experiencia del usuario y refuerza el SEO de tu proyecto, porque reemplaza identificadores numéricos poco descriptivos por textos derivados del título.
La idea es simple: en lugar de mostrar pregunta/6 en la barra de direcciones, queremos mostrar foro/como-implementar-laravel. Y todo esto puede automatizarse con un componente externo y unos cuantos ajustes en migraciones, modelos y rutas.
¿Qué es un slug y por qué importa en una URL?
Un slug es una versión amigable del título, escrita en minúsculas, sin acentos y con guiones en lugar de espacios. Funciona como identificador único en la URL y aporta contexto tanto al usuario como a los buscadores.
¿Qué es un slug en Laravel? Es una columna adicional en tu tabla que guarda una versión legible del título. Por ejemplo, el título “Pregunta ABC” se transforma en
pregunta-abcy se usa en la URL para identificar el registro.
El beneficio inmediato es que tu sistema deja de exponer IDs internos y empieza a mostrar información significativa en la barra de direcciones.
¿Cómo instalar y configurar el paquete de slugs?
El primer paso es instalar el componente vía Composer copiando el comando que indica la documentación y pegándolo en la terminal. El sistema se conecta a internet, descarga las dependencias y crea una carpeta en vendor con todo el código fuente que puedes leer para mejorar tus habilidades de programación.
Después, necesitas tres ajustes:
- Agregar la columna
slugen la migración de preguntas, justo después del título por organización. - Declarar en el modelo
Questionel traitSluggabley configurar el campo fuente, normalmente la columnatitle. - Ejecutar
php artisan migrate:refreshjunto con los seeders para regenerar la base de datos de prueba.
Al revisar la base de datos verás que cada pregunta ahora tiene su título habitual y, junto a él, su versión en formato slug.
¿Cómo se generan los slugs automáticamente?
El paquete se engancha a los eventos creating y updating del modelo, los mismos que ya conocías cuando configuraste la eliminación en cascada con el evento deleting. Esto significa que no escribes lógica manual: cada vez que creas o actualizas una pregunta, el slug se genera o se ajusta solo.
Si alguien crea otra pregunta con un título idéntico, el sistema detecta la colisión y le agrega un sufijo numérico, por ejemplo abc-1, para mantener la unicidad.
¿Cómo actualizar las rutas para usar slugs en lugar de IDs?
El siguiente paso es ajustar routes/web.php para que las URLs reflejen este cambio. Aquí hay dos modificaciones clave:
- Renombrar el segmento
preguntaporforoen las rutas que se visualizan en el navegador, como el listado, la creación, la edición y la vista de detalle. - Indicar en el parámetro de ruta el nombre de la columna por la que se debe buscar el registro, usando la sintaxis
{question:slug}para que Laravel resuelva el modelo a partir del slug y no del ID.
Las rutas internas, como guardar o actualizar, pueden mantener su nombre técnico porque no son páginas que el usuario visualice, pero por consistencia conviene unificar todo bajo el mismo estándar.
¿Necesito cambiar la ruta de eliminación también? No es obligatorio, porque la eliminación se puede manejar por ID. Pero por estandarización y para que el código se lea de manera uniforme, vale la pena migrarla al formato slug.
¿Cómo se ve el resultado en el navegador?
Al iniciar sesión y crear una pregunta titulada “ABC”, la URL ya no muestra un número sino algo como foro/abc. Si creas otra con el mismo título, aparecerá foro/abc-1. Lo mismo ocurre al editar: el sistema regenera el slug si el título cambia y mantiene la integridad de las URLs.
¿Qué otras mejoras profesionales puedes aplicar al proyecto?
Una vez que tu sistema usa slugs, conviene aprovechar el momento para refinar otros detalles del código. Por ejemplo, en los métodos store y update de tus controladores puedes retornar directamente los datos validados con el spread operator (...), en lugar de listar campo por campo. Así reutilizas las reglas de validación que ya escribiste en los Form Requests.
También es buena idea revisar los archivos que instaló el starter kit de Laravel:
- Rutas que ya no usas y deberías borrar para limpiar el proyecto.
- Acciones de inicio de sesión, restablecimiento de contraseña y verificación de correo, que vale la pena leer para entender cómo se construyó el sistema de autenticación.
- Vistas que puedes traducir al español, junto con el logo y los textos por defecto, para personalizar la interfaz.
Recuerda que escribimos código una sola vez, pero lo modificamos y lo leemos muchas veces. Por eso cuidar estos detalles tiene un gran impacto a largo plazo.
¿Cuál es el reto final del curso?
El reto es claro: borra las rutas que no necesitas, traduce al español las vistas que Laravel genera por defecto y personaliza el logo. Con eso vas a entender en detalle cómo se ensambló este proyecto profesional y vas a salir con la capacidad de crear proyectos reales.
Para dar el siguiente paso, te recomiendo el curso de programación avanzada con PHP, porque herramientas como Laravel resuelven muchas necesidades de manera transparente, y conocer el motor que hay debajo te convierte en mejor desarrollador. ¿Qué fue lo que más te costó implementar de los slugs? Cuéntamelo en los comentarios.