2012-10-10 55 views
19

Tengo la clase de entidad Page con la columna type=integer. Cuando lo hago:Sonataadminbundle: sección de administración múltiple para la misma entidad

<service id="sonata.admin.pages" class="Main\ProgramBundle\Admin\PageAdmin"> 
     <tag name="sonata.admin" manager_type="orm" group="dashboard" label="Pages"/> 
     <argument /> 
     <argument>Main\ProgramBundle\Entity\Page</argument> 
     <argument>SonataAdminBundle:CRUD</argument> 
    </service> 


    <service id="sonata.admin.groups" class="Main\ProgramBundle\Admin\GroupAdmin"> 
     <tag name="sonata.admin" manager_type="orm" group="stories" label="Groups"/> 
     <argument /> 
     <argument>Main\ProgramBundle\Entity\Page</argument> 
     <argument>SonataAdminBundle:CRUD</argument> 
    </service> 

En resumen, ambas secciones funcionan en la misma entidad, excepto que cada una tiene diferentes consultas y formularios.

Pero lo que sucede es que la sonata siempre ejecuta Admin/GroupAdmin, incluso si selecciono PageAdmin. ¿Como hacer esto?

Respuesta

31

no tengo la reputación suficiente para agregar un comentario a la respuesta anterior, pero falta la siguiente información:

también es necesario definir un valor de $ baseRouteName única, además de $ baseRoutePattern en sus clases de administración:

protected $baseRouteName = 'admin_vendor_bundlename_adminclassname'; 

protected $baseRoutePattern = 'unique-route-pattern'; 

Sólo tiene que hacer esto para una clase, b Por favor, considere hacerlo en ambos para mantener claro lo que está sucediendo.

+3

Todavía tendrías problemas cuando agregas esta entidad a otro administrador. Sonata generará un error al decir que hay muchos administradores registrados. Esto está solucionado. agregando 'admin_code' => 'sonata.product.admin.product' a la función de agregar. Esto le dirá a sonata qué administrador usar específicamente. – 11mb

+0

Gracias! @ 11mb Tuve el problema en un programa que acaba de agregar '' '-> add ('someProperty', null, array ('admin_code' => 'some.service.admin, id'))' '' – Cassiano

4

Sonata crea rutas automáticamente en función de los nombres de sus entidades. Entonces, si tienes 2 clases de administrador, hay un conflicto. Tienes que configurar diferentes patrones de ruta.

Añadir esta propiedad a Main \ ProgramBundle \ Admin \ GroupAdmin.php:

protected $baseRoutePattern = 'page-group'; 
+0

Lo hice, ahora ambos URL son 'admin/page-group/list', incluso si coloco estas propiedades (diferentes, por supuesto) en ambos, PageAdmin y GroupAdmin :( – Zeljko

+0

No coloque esta propiedad en ambas clases. Debería poner esta propiedad solo en una de sus clases de Admin. Si la coloca en ambas, pasará a la misma situación de conflicto que antes. – pulzarraider

+2

Lo primero que intenté fue exactamente lo que me dijo: poner la propiedad solo en una clase de administrador . Eso no funcionó y solo después de eso, intenté ambos casos. – Zeljko

-1

Sin duda encontró su solución, pero otra forma de hacerlo sería crear una clase principal y heredar usando inheritance mapping. Entonces puede tener diferentes repositorios y el administrador de sonata no funcionaría de manera diferente.

+1

Eso sería mejor con un fragmento de código en :) – ForceMagic

+0

Lo intenté primero con una entidad que amplía mi original, pero 'console doctrine: schema: update' falla al intentar crear la misma tabla dos veces, o peor, terminas con dos tablas en el DB. –

Cuestiones relacionadas