2012-10-10 12 views
19

Ho classe di entità Page con la colonna type=integer. Quando faccio:Sonataadminbundle: sezione di amministrazione multipla per la stessa entità

<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> 

In breve, entrambe le sezioni funzionano sulla stessa entità tranne che ciascuna ha query e moduli diversi.

Ma quello che succede è che la sonata esegue sempre Admin/GroupAdmin, anche se seleziono PageAdmin. Come fare questo?

risposta

31

io non ho abbastanza reputazione per aggiungere un commento alla risposta precedente, ma manca le seguenti informazioni:

È inoltre necessario definire un valore di $ baseRouteName unico in aggiunta a $ baseRoutePattern nelle classi di amministrazione:

protected $baseRouteName = 'admin_vendor_bundlename_adminclassname'; 

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

Hai solo bisogno di fare questo per una classe, b ut considerare di farlo in entrambi per mantenere chiaro cosa sta succedendo.

+3

Si verificano ancora dei problemi quando si aggiunge questa entità a un altro amministratore: Sonata genererà un errore che indica che ci sono molti amministratori registrati. aggiungendo 'admin_code' => 'sonata.product.admin.product' alla funzione add, che indicherà a sonata quale amministratore utilizzare in modo specifico. – 11mb

+0

Grazie! @ 11mb Ho avuto il problema in uno show appena aggiunto '' '-> add ('someProperty', null, array ('admin_code' => 'some.service.admin, id'))' '' – Cassiano

4

Sonata crea percorsi automaticamente in base ai nomi delle entità. Quindi se hai 2 classi di amministrazione, c'è un conflitto. Devi configurare un modello di percorso diverso.

Aggiungi questa proprietà al Main \ ProgramBundle \ Admin \ GroupAdmin.php:

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

ho fatto, ora entrambe le url del 'sono admin/pagina-group/list', anche se ho posto queste proprietà (diversa, naturalmente) sia pageAdmin e amministratore gruppo :( – Zeljko

+0

Non mettere questa proprietà per entrambe le classi. Devi mettere questa proprietà solo su una delle tue classi Admin. Se la inserisci in entrambe, passerai alla stessa situazione di conflitto. – pulzarraider

+2

La prima cosa che ho provato è esattamente come hai detto tu, inserisci la proprietà solo in una classe di amministrazione Questo non ha funzionato e solo dopo ho provato entrambi i casi – Zeljko

-1

Hai sicuramente trovato la soluzione, ma un altro modo per farlo sarebbe quello di creare una classe genitore ed ereditare usando inheritance mapping. Sarai quindi in grado di avere repository diversi e l'amministratore di sonata non funzionerebbe diversamente.

+1

Quello sarebbe meglio con un frammento di codice in :) – ForceMagic

+0

Ho provato prima con un'entità che estende il mio originale - ma 'console doctrine: schema: update' fallisce mentre stai provando a creare la stessa tabella due volte - o peggio, ti ritrovi due tabelle nel DB. –

Problemi correlati