SonataAdminBundle mit Symfony4 und FOSUserBundle installieren

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:

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:

Screenshot Sonata Admin Bundle Backend
Das SonataAdminBundle Backend

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.