
Hier eine kleine Anleitung nach der ich, nachdem ich das FOSUserBundle mit Symfony4 installiert habe, dieses in das SonataAdminBundle integriere.
Die offiziellen Dokumentationen findet ihr hier:
- Sonata Admin Bundle: https://sonata-project.org/bundles/admin/master/doc/index.html
- Sonata User Bundle: https://sonata-project.org/bundles/user/master/doc/index.html
- FOSUserBundle: https://symfony.com/doc/current/bundles/FOSUserBundle/index.html
1. Installation
Als erstes installieren wir mal das Bundle via composer
composer require sonata-project/admin-bundle
2. Installation eines Storages Bundles für das AdminBundle
Das Admin Bundle benötigt eine StorageBundle, damit es mit der Datebank kommunizieren kann – in meinem Fall MySQL –> SonataDoctrineORMAdmin
composer require sonata-project/doctrine-orm-admin-bundle
Das war es auch schon – der Admin-Bereich ist nun unter /admin erreichbar 🙂
Allerdings haben wir natürlich noch keine Entities, die im Admin erscheinen.
Als erstes möchte ich das FOSUserBundle in den Sonata Admin integrieren
Sonata User Bundle installieren
Dieses Plugin verbindet das FOSUserBundle mit dem SonataAdminBundle
composer require sonata-project/user-bundle
Nun müsst ihr noch folgende Änderungen an den Konfigurations-Dateien vornehmen:
Doctrine konfigurieren
# config/packages/doctrine.yaml
doctrine:
#…
dbal:
types:
json: Sonata\Doctrine\Types\JsonType
FOSUserBundle konfigurieren
# config/packages/fos_user.yaml
fos_user:
db_driver: orm # can be orm or odm
firewall_name: main
user_class: App\Application\Sonata\UserBundle\Entity\User # die Entität wird erst später beim erweitern des Bundles erstellt
group:
group_class: App\Application\Sonata\UserBundle\Entity\Group # die Entität wird erst später beim erweitern des Bundles erstellt
group_manager: sonata.user.orm.group_manager # If you're using doctrine orm (use sonata.user.mongodb.group_manager for mongodb)
service:
user_manager: sonata.user.orm.user_manager
from_email: address: "%mailer_user%"
sender_name: "%mailer_user%"
Routing anpassen
# config/routes.yaml
sonata_user_admin_security:
resource: '@SonataUserBundle/Resources/config/routing/admin_security.xml'
prefix: /admin
sonata_user_admin_resetting:
resource: '@SonataUserBundle/Resources/config/routing/admin_resetting.xml'
prefix: /admin/resetting
security.yaml anpassen
# config/packages/security.yaml
security:
#...
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
SONATA:
- ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented
#...
firewalls:
#...
admin:
pattern: /admin(.*)
context: user
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
failure_path: null
logout:
path: /admin/logout
target: /admin/login
anonymous: true
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
csrf_token_generator: security.csrf.token_manager
logout: true
anonymous: true
#...
access_control:
- { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
#...
Admin Bundle erweitern
bin/console sonata:easy-extends:generate SonataUserBundle --dest=src --namespace_prefix=App
dies erstellt die UserBundle inkl. aller benötigten Entitäten im Ordner /src/Application/Sonata/UserBundle
Jetzt müssen wir das Bundle noch aktivieren bzw. zur bundles.php hinzufügen:
<?php
// config/bundles.php
return [
//…
App\Application\Sonata\UserBundle\ApplicationSonataUserBundle::class => ['all' => true],
];
und als letzter Schritt erstellen wir die Datei /config/packages/sonata.yaml
zumindest existierte die Datei bei mir noch nicht, sodass ich sie anlegen musste
config/packages/sonata.yaml
sonata_user:
class:
user: App\Application\Sonata\UserBundle\Entity\User
group: App\Application\Sonata\UserBundle\Entity\Group
jetzt folgenden Befehl auf der Console ausführen, um die Datenbank zu aktualisieren, bzw. die User- und Gruppen-Tabellen anzulegen:
php bin/console doctrine:schema:update --force
Zu beachten gilt: das Update auf die Datenbank legt die Tabellen für User und Gruppen an – falls Sie noch nicht existieren.
In meinem Fall (ich hatte vorher das FOSUserbundle nach dieser Methode installiert: http://wocs.de/symfony4-mit-fosuserbundle-installieren/) hiessen die User-Tabelle vorher fos_user . Die neu erstellte Tabelle heisst nun fos_user_user.
Gegebenfalls müsst ihr dann die vorhanden Daten rüberschieben oder den entsprechenden table-name anpassen:
/src/Application/Sonata/UserBundle/Resources/config/doctrine/User.orm.xml
Hat alles geklappt? Dann solltet Ihr jetzt über /admin auf das Sonata-Admin Backend zugreifen können:
