Contenido del curso
Administración
- 3

Configuración y Creación de Entidades en Symfony con Doctrine
07:05 min - 4

Relaciones de Tablas en Symfony: Categorías, Publicaciones y Comentarios
07:51 min - 5

Panel administrativo con EasyAdmin en Symfony
13:50 min - 6

Personaliza vistas en EasyAdmin con Symfony
14:39 min - 7

Traducción y Personalización de Vistas en Español para Administradores
06:12 min - 8

Datos falsos con Foundry en Symfony
07:32 min - 9

Slugs automáticos con SlugField en EasyAdmin
Viendo ahora - 10

Slugs únicos con validación lógica y física
08:45 min - 11

Configuración de Usuarios para Seguridad en Panel Administrativo
05:26 min - 12

Registro y login de usuarios en Symfony
08:24 min - 13

Gestión de Usuarios con CRUD en Panel Administrativo
09:06 min - 14

Configuración de Relaciones en Base de Datos con Doctrine y Symfony
11:29 min - 15

Encriptación de Contraseñas en Symfony paso a paso
07:47 min - 16

Actualizar panel admin con relaciones Symfony
09:36 min
Área de acceso público
- 17

Configuración de Rutas y Controladores en Symfony
12:19 min - 18

Formulario de Comentarios con Autenticación de Usuario
06:18 min - 19

Configuración de Formularios y Validaciones en Symfony
12:32 min - 20

Instalación y Configuración de Bootstrap con Symfony y Webpack
09:19 min - 21

Mejoras Visuales en Sistemas de Diseño y Administración de Bases de Datos
08:04 min
Conclusión
Slugs automáticos con SlugField en EasyAdmin
Resumen
Generar slugs automáticos en Symfony deja de ser un problema cuando aprovechas el campo SlugField de EasyAdmin junto con lógica personalizada en tus factories. Esta guía te muestra cómo transformar datos manuales en datos cercanos al mundo real para categorías y publicaciones.
¿Por qué automatizar la creación de slugs en EasyAdmin?
Cuando creas una categoría o publicación desde el panel administrativo, escribir el slug a mano rompe el flujo y abre la puerta a inconsistencias. Lo natural es que el slug se derive del nombre o del título, sin que tú tengas que pensarlo.
En el formulario por defecto, el slug aparece como un campo de texto cualquiera. El resultado: slugs que no coinciden con el nombre, formatos incoherentes y datos falsos que no reflejan un escenario real.
¿Qué es un slug? Es la versión amigable de una URL, normalmente en minúsculas y con guiones en lugar de espacios. Por ejemplo, tutorial-de-symfony en vez de Tutorial de Symfony.
¿Cómo configurar el SlugField en publicaciones y categorías?
El primer paso es importar la clase SlugField y reemplazar el campo de texto por uno que genere el slug a partir de otro campo del formulario.
En el crud controller de publicaciones, sustituye el campo de texto del slug por:
php SlugField::new('slug')->setTargetFieldName('title');
Esto le indica a EasyAdmin que tome el valor del campo title y lo transforme automáticamente en un slug válido [04:15]. Cuando escribas algo como tutorial D en el título, el slug se rellenará solo.
En el caso de las categorías, repite la operación pero apuntando al campo name:
php SlugField::new('slug')->setTargetFieldName('name');
No elimines el campo de texto del nombre, porque ese sí debe seguir siendo un text field normal. Solo cambias el del slug.
¿Cómo escribir lógica personalizada en un Factory de Doctrine?
Los factories generan datos falsos para poblar la base de datos en desarrollo. El problema es que, por defecto, el slug y el nombre pueden no tener relación entre sí. La solución es construir el slug dentro del propio factory.
En el factory de categorías, guarda el nombre en una variable y deriva el slug con funciones nativas de PHP:
php $name = self::faker()->unique()->word(); $slug = str_replace(' ', '-', strtolower($name));
La función strtolower convierte el texto a minúsculas y str_replace cambia los espacios por guiones. Como un word de Faker es una sola palabra, conviene usar unique() para evitar duplicados, ya que la probabilidad de repetición es alta cuando trabajas con palabras sueltas [06:50].
¿Por qué usar unique en categorías y no en publicaciones? Porque las categorías se generan con una sola palabra y se repiten fácilmente. Los títulos de publicaciones son oraciones completas, así que la probabilidad de colisión es mínima.
¿Cómo aplicar la misma lógica a las publicaciones?
En el factory de publicaciones, repites el patrón pero sobre el título:
php $title = self::faker()->sentence(); $slug = str_replace(' ', '-', strtolower($title));
Aquí no necesitas unique() porque cada oración generada por Faker es prácticamente irrepetible. La idea es que el slug refleje fielmente el contenido del título, igual que ocurre en un blog real.
¿Cómo recargar los datos falsos para validar los cambios?
Una vez configurados los factories, recarga la base de datos con el comando de Doctrine para fixtures:
bash php bin/console doctrine:fixtures:load
Responde sí a la confirmación y deja que el comando termine. Al revisar el panel de categorías verás slugs coherentes con cada nombre, y en publicaciones el slug seguirá fielmente al título.
¿Qué hace doctrine:fixtures:load? Vacía la base de datos y la vuelve a llenar con los datos generados por tus factories. Úsalo solo en entornos de desarrollo.
Algunos puntos clave para que todo funcione correctamente:
- Importa
SlugFielddesde el namespace de EasyAdmin antes de usarlo. - Usa
setTargetFieldNameapuntando al campo exacto del formulario. - Aplica
strtolowerantes destr_replacepara asegurar el formato. - Añade
unique()en Faker cuando trabajes con palabras sueltas. - Recarga las fixtures cada vez que modifiques la lógica del factory.
Con estos cambios, tu sistema deja de pedirte slugs manuales y empieza a comportarse como una aplicación real. Cuéntame en los comentarios qué otra lógica personalizada has añadido a tus factories de Doctrine.