Si usas sonata-project para construir tu administrador llegará un momento en que quieras hacer algunos ajustes personalizados. En algunos casos nos encontramos con la necesidad de enlazar dentro de una vista de administración con otro administrador.
Aunque no es nada complicado, te enseñamos como por si (al igual que me paso a mi) se te atraganta la primera vez.
Encontrando la ruta correcta
Si nos olvidamos por un momento de sonata y pensamos en como solemos trabajar con symfony lo que tenemos que hacer es llamar a la ruta con los parametros necesarios. Pero no es una ruta generada por nosotros por lo que no podemos acudir al controlador a buscarla. Para encontrar esta ruta debemos usar el comando debug:router
.
El comando debug:router
de symfony nos permite ver todas las rutas disponibles en nuestra web, por tanto solo tenemos que hacer:
php bin/console debug:router
Y buscar la ruta que queremos.
Sin embargo, es posible que obtengamos demasiadas opciones (sobre todo si usas dynamic_routing) por lo que conviene filtrarlas.
php bin/console debug:router | grep palabra_a_filtrar
Podemos usar como palabra_a_filtrar
parte de la ruta que buscamos o la palabra «admin» si queremos todas las rutas de administración.
La primera columna del listado obtenido corresponde al nombre de nuestra ruta por ejemplo «admin_app_book_show». Si nos fijamos bien siempre tienen la misma forma: «admin_<nombre del bundle>_<nombre de la entidad>_<accion>». De esta forma si queremos la ruta para editar dicha entidad sería «admin_app_book_edit». Todas las rutas crud, excepto el listado, necesitan de un parámetro id, que corresponde con el id de la entidad a la que queremos acceder.
Enlazamos a dicha ruta con path
Ya tenemos todo lo que necesitamos para enlazar a la acción buscada, por ejemplo en twig:
1 |
<a href="{{ path('admin_app_book_edit', {id: value.id}) }}">Editar Book</a> |
Donde hemos supuesto que la variable value
contiene nuestra entidad a enlazar.
Conclusión
Como dije al principio, no es algo complicado pero muchas veces nos olvidamos de que a pesar de los componentes que usamos seguimos trabajando con symfony. Si no sabemos como hacer algo solo tenemos que volver a las raices.