2016-05-07 7 views
1

Ich versuche die Konfiguration (admin_orm.xml) eines Dienstes (sonata.user.admin.user), der von SonataUserBundle erstellt wurde, zu bearbeiten oder zu überschreiben. Ich würde gerne den Entitymanager in diesem Dienst verwenden können. Weil ich nach der Erstellung eines neuen Benutzers auf SonataAdminBundle (https://sonata-project.org/bundles/admin/2-3/doc/reference/saving_hooks.html) die Bearbeitung für eine andere Entität bearbeiten muss.Symfony 2.8: Bearbeiten der Dienstkonfiguration

Die Konfigurationsdatei:

<parameters> 
    <parameter key="sonata.user.admin.groupname">sonata_user</parameter> 
</parameters> 

<services> 
    <service id="sonata.user.admin.user" class="%sonata.user.admin.user.class%"> 
     <tag name="sonata.admin" manager_type="orm" group="%sonata.user.admin.groupname%" label="users" label_catalogue="SonataUserBundle" label_translator_strategy="sonata.admin.label.strategy.underscore" /> 
     <argument /> 
     <argument>%sonata.user.admin.user.entity%</argument> 
     <argument>%sonata.user.admin.user.controller%</argument> 
     <call method="setUserManager"> 
      <argument type="service" id="fos_user.user_manager" /> 
     </call> 
     <call method="setTranslationDomain"> 
      <argument>%sonata.user.admin.user.translation_domain%</argument> 
     </call> 
    </service> 

    <service id="sonata.user.admin.group" class="%sonata.user.admin.group.class%"> 
     <tag name="sonata.admin" manager_type="orm" group="%sonata.user.admin.groupname%" label="groups" label_catalogue="SonataUserBundle" label_translator_strategy="sonata.admin.label.strategy.underscore" /> 
     <argument /> 
     <argument>%sonata.user.admin.group.entity%</argument> 
     <argument>%sonata.user.admin.group.controller%</argument> 
     <call method="setTranslationDomain"> 
      <argument>%sonata.user.admin.group.translation_domain%</argument> 
     </call> 
    </service> 
</services> 

Antwort

0

fand ich einen Weg, um mein Problem zu beheben, die diese Zeile:

$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager'); 

es wahrscheinlich das Problem nicht der sauberste Weg ist zu beheben, aber es funktioniert für mich.

0

Ich glaube, Sie klingen die Service-Definition kopieren und boxed fosuserbundle Dienst deaktivieren.

Um Code-Duplikate wegzulassen, könnten Sie vom ursprünglichen Dienst ausgehen.

Definieren Sie die Menüeinträge in Ihrer Datei config.yml, um die nativen Administratordienste auszuschließen.

+0

Zunächst einmal danke für Ihre Wiederholung und ja, ich habe bereits versucht, die Service-Definition zu kopieren, aber ich bekomme einen Fehler wie: Kann nicht automatisch Basisroutenname bestimmen, bitte definieren Sie einen Standardwert baseRouteName für die Admin-Klasse .. Es ist vielleicht weil ich muss den Boxed Service deaktivieren, aber wie kann ich das machen? –

+0

Ich weiß nicht über eine Funktionalität wie Deaktivieren von Diensten in Symfony out of the box. Aber ich denke, Sie können einfach einen Compiler-Pass erstellen, um Ihre Containerdefinitionen zu überschreiben. Sehen Sie sich dieses Beispiel an: http://symfony.com/doc/current/components/dependency_injection/tags.html Definieren Sie, dass der Compiler in Ihrem ChildMediaBundle übergeben wird: http://symfony.com/doc/current/cookbook/service_container /compiler_passes.html –