Sonata Admin: error en la clase AbstractTaggedAdmin

Tengo algún tiempo trabajando con Sonata Admin en un proyecto que empezó por allá del 2019, en ese momento me parecía la cosa más sensacional del mundo, pero ahora, al día de hoy, me da más problemas que soluciones.

Empezando por uno de los bundles que se encuentra abandonado y no soporta la versión 5 de Symfony, igualmente el paquete principal no tiene muchas actualizaciones recientes, a estas alturas me sale mejor hacerlo de nuevo y lo que no hay es tiempo.

Una de las cosas que se podían hacer con la versión anterior era definir servicios (services.yaml) sin definir un Entity Class:

admin.reporte:        
    class: App\Admin\ReporteAdmin        
    arguments: [~, ~, App\Controller\ReporteAdminController]        
    tags:            
        - { name: sonata.admin, manager_type: orm, group: 'Reportes', label: Reportes }

El segundo argumento dentro del apartado arguments se podía dejar con un valor por defecto: ~, sin embargo esto ahorroja el siguiente mensaje:

Argument 2 passed to Sonata\AdminBundle\DependencyInjection\Admin\AbstractTaggedAdmin::__construct() must be of the type string, null given, called in C:\xampp-8.0
.1\htdocs\project-name\var\cache\dev\ContainerVxPjhaa\getAdmin_ReporteService.php on line 39

En dónde estaremos usando esa clase? Si buscas en tu código principal notarás que no está ahí, bueno este error hace referencia a que el segundo varlor de arguments no puede estar vacío o no tene un valor por defecto.

¿Cómo corrijo este error?

Tienes dos opciones, la primera opción es definir la Entidad, lo cual resulta en algo parecido a esto:

...
arguments: [~, App\Entity\Reporte, App\Controller\ReporteAdminController]
...

La segunda opción consiste en eliminar todo el bloque de tu configuración de services.yaml y crear un nuevo controlador que se encargará de manejar las urls o acciones que hayas creado, por ejemplo:

/*** @Route("/admin/helper/departamentos", name="helper_departamentos")*/
public function departamentosAction($json = true){    
    $em = $this->getDoctrine()->getManager();    
    $rep = $em->getRepository('App\Entity\Departamento');    
    return $rep->findAllOrderedByNombre($json);
}

Nota:

Al usar un controlador personalizado deberás definir y validad los permisos de usuario manualmente.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *