Curso Práctico de Symfony

Actualizar panel admin con relaciones Symfony

Curso Práctico de Symfony

Contenido del curso

Administración

Actualizar panel admin con relaciones Symfony

Resumen

Cuando agregas nuevas tablas y relaciones en Symfony, tu panel administrativo necesita saber que existen. En esta guía aprenderás a configurar el panel administrativo para asociar usuarios, publicaciones y comentarios, deshabilitar acciones y personalizar la vista de registro. Es ideal para quienes ya construyeron un CRUD básico y quieren un backoffice funcional.

Por qué el panel administrativo no reconoce las nuevas relaciones

Después de modificar la entidad de usuarios y crear relaciones con publicaciones y comentarios, el panel deja de permitir crear registros porque depende de campos que aún no están declarados en los controladores CRUD.

El flujo de cambios se concentra en pocos archivos: el CRUD de comentarios, el CRUD de publicaciones, el CRUD de usuarios, la entidad User, el formulario de registro y su plantilla.

¿Qué es un CRUD Controller en EasyAdmin? Es la clase que define cómo se listan, crean, editan y eliminan los registros de una entidad dentro del panel administrativo de Symfony.

Cómo asociar campos en los CRUD de comentarios y publicaciones

El primer paso es abrir el controlador administrativo de comentarios y declarar los campos de asociación hacia publicaciones y usuarios. Copias el bloque de un campo existente y lo adaptas al nuevo.

La misma lógica aplica al CRUD de publicaciones: defines la asociación con el usuario para que el formulario de creación lo muestre como opción seleccionable.

  • Campo de asociación a publicaciones en el CRUD de comentarios.
  • Campo de asociación a usuarios en el CRUD de comentarios.
  • Campo de asociación a usuarios en el CRUD de publicaciones.

Al intentar crear un registro aparece un error que dice que no puede convertir la clase en string. Es esperado, y se resuelve con el método mágico __toString() más adelante.

Cómo personalizar el CRUD de usuarios en Symfony

Dentro del UserCrudController puedes mejorar la búsqueda y mostrar el nombre del usuario al editar. Para eso importas la clase TextField y la agregas a la configuración de campos.

Basta con replicar el bloque del email, cambiarlo por text y etiquetarlo como nombre. Al refrescar el panel, ya verás el nombre disponible al modificar usuarios.

Cómo deshabilitar la acción de crear un usuario desde el panel

El objetivo aquí es que los usuarios solo se registren desde la ventana pública, nunca desde el backoffice. Para lograrlo importas dos clases en el controlador: Action en singular y Actions en plural.

Luego defines un método público llamado configureActions que retorna una instancia de Actions con la acción de crear deshabilitada.

  • Action se usa para referirse a una acción individual.
  • Actions se usa para configurar el conjunto de acciones del CRUD.
  • disable(Action::NEW) quita el botón de crear sin afectar editar ni eliminar.

Al actualizar el panel, el botón de crear nuevo usuario desaparece, pero las opciones de modificar y eliminar siguen activas.

Cómo resolver el error "cannot convert to string" con toString

Cuando un formulario intenta mostrar un objeto User como texto, Symfony necesita saber qué representación devolver. Si no la defines, lanza un error al crear o editar comentarios y publicaciones.

La solución vive dentro de la entidad User. Al final de la clase, después de las relaciones y campos, agregas el método mágico __toString() que retorna un string con el nombre del usuario.

php public function __toString(): string { return $this->nombre; }

¿Para qué sirve el método __toString en Symfony? Permite que una entidad se muestre como texto cuando se usa en formularios, plantillas o paneles administrativos, evitando errores de conversión.

Después de este cambio, los selects de usuario en publicaciones y comentarios muestran el nombre real, y el panel permite crear y editar registros sin errores.

Cómo agregar el campo nombre al formulario de registro

La ventana de registro ahora exige un nombre, así que hay que actualizar dos archivos: el formulario RegistrationFormType y su plantilla Twig.

En el formulario duplicas la línea del email, la cambias por el campo nombre y la dejas con su tipo correspondiente. Al recargar la vista, el campo aparece al final del formulario porque la plantilla dibuja cada campo en orden.

Cómo reordenar los campos en la plantilla de registro

Para que el nombre aparezca antes del email, abres la plantilla de registro y mueves la línea del nombre arriba de la del email. Es un cambio de Twig puro, sin tocar el formulario.

Una vez ordenado, puedes probar el flujo completo:

  1. Registrar un usuario nuevo con nombre, email y contraseña.
  2. Iniciar sesión con el usuario administrador.
  3. Verificar en el panel que el usuario recién creado aparece con su nombre.
  4. Asignarle el rol de administrador desde la edición.

La redirección posterior al registro y al login queda pendiente para una siguiente clase.

Qué archivos modificas para actualizar el panel administrativo

Aunque el resultado parece grande, los archivos tocados son pocos y el patrón se repite en cualquier proyecto Symfony con EasyAdmin.

  • CRUD de comentarios: campos de asociación a publicaciones y usuarios.
  • CRUD de publicaciones: campo de asociación a usuarios.
  • CRUD de usuarios: campo nombre, búsqueda y configureActions para deshabilitar crear.
  • Entidad User: método __toString() que retorna el nombre.
  • Formulario de registro: nuevo campo nombre.
  • Plantilla de registro: reordenamiento de campos.

Haz estos cambios, prueba cada flujo y deja en los comentarios qué error te apareció primero al asociar entidades.