"Oder sogar, wie kann ich nur die Benutzer (mit Benutzern und Gruppen) vollständig entfernen oder verstecken?"
Also, wir haben SonataUserBundle und unsere AppBundle. In beiden haben wir Benutzer und Gruppenentität. Und wir wollen keine Entitäten aus Sonaten verwenden - wir erweitern sie einfach. SonataUserBundle hat jedoch bereits die Klassen UserAdmin und GroupAdmin installiert. Deshalb, nach SonataUserBundle im Admin-Menü zwei Dienste Installation erscheinen:
Wie Sie wissen, Klasse jeder Sonate Admin wir in der services.yml Datei deklarieren. In SonataUserBundle haben wir eine andere Dateien, die Sonate Entwickler Dienstleistungen in erklären Bei Lehre ORM wir admin_orm.xml Datei aussehen sollte, die in diesem Pfad liegt.
vendor/sonata-project/user-bundle/Resources/config/admin_orm.xml
Innerhalb der Datei, die wir die finden Erklärung der Admin-Dienste - Admin und GroupAdmin:
<?xml version="1.0" encoding="UTF-8"?>
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="sonata.user.admin.groupname">sonata_user</parameter>
<parameter key="sonata.user.admin.label_catalogue">SonataUserBundle</parameter>
<parameter key="sonata.user.admin.groupicon"><![CDATA[<i class='fa fa-users'></i>]]></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="%sonata.user.admin.label_catalogue%" label_translator_strategy="sonata.admin.label.strategy.underscore" icon="%sonata.user.admin.groupicon%"/>
<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="%sonata.user.admin.label_catalogue%" 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>
Wie Sie die ids unserer Dienstleistungen sehen hier können:
sonata.user.admin.user
sonata.user.admin.group
Die einfachste Methode, sie zu überschreiben, besteht darin, die gleichen Dienste (ich meine, wir verwenden diese IDs) in unserer Datei services.yml zu erstellen. Ja, Sie können mit mir streiten, dass diese Methode dumm ist, aber wie gesagt, es ist nicht die einzige.
So Sonata Dienstleistungen in unseren services.yml Willen sieht wie folgt aus:
sonata.user.admin.user:
class: "%sonata.user.admin.user.class%"
arguments: [~, "%sonata.user.admin.user.entity%", "%sonata.user.admin.user.controller%"]
tags:
- { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "users", icon: "<i class=\"fa fa-users\"></i>" }
calls:
- [ setUserManager, [ "@fos_user.user_manager" ] ]
- [ setTranslationDomain, [ "%sonata.user.admin.user.translation_domain%" ] ]
sonata.user.admin.group:
class: "%sonata.user.admin.group.class%"
arguments: [~, "%sonata.user.admin.group.entity%", "%sonata.user.admin.group.controller%"]
tags:
- { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "groups" }
calls:
- [ setTranslationDomain, [ "%sonata.user.admin.group.translation_domain%" ] ]
Jetzt können Sie das Admin-Dashboard aktualisieren und sehen, dass nichts passiert. Aber unser Ziel war es, diesen Dienst über unser Dashboard und Menü zu deaktivieren. Lass uns den Trick machen. Hinzufügen
show_in_dashboard: false
tags:
- { show_in_dashboard: false, name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "users", icon: "<i class=\"fa fa-user\"></i>" }
an die Deklaration dieses Dienstes in services.yml.
Deshalb sind unsere Dienstleistungen wie folgt aussehen:
sonata.user.admin.user:
class: "%sonata.user.admin.user.class%"
arguments: [~, "%sonata.user.admin.user.entity%", "%sonata.user.admin.user.controller%"]
tags:
- { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "users", icon: "<i class=\"fa fa-user\"></i>", show_in_dashboard: false }
calls:
- [ setUserManager, [ "@fos_user.user_manager" ] ]
- [ setTranslationDomain, [ "%sonata.user.admin.user.translation_domain%" ] ]
sonata.user.admin.group:
class: "%sonata.user.admin.group.class%"
arguments: [~, "%sonata.user.admin.group.entity%", "%sonata.user.admin.group.controller%"]
tags:
- { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "groups", show_in_dashboard: false }
calls:
- [ setTranslationDomain, [ "%sonata.user.admin.group.translation_domain%" ] ]
Nach dieser trivialen Manipulationen Sonata Dienste werden vollständig von Ihrem Armaturenbrett verschwinden.