Symfony4 mit FOSUserBundle installieren

Ich habe vor einigen Tagen etwas recherchiert, wie ich eine Benutzer-Registrierung und -Verwaltung in einem Symfony-Projekt realisieren kann. Dabei bin ich mal wieder auf das FOSUserBundle gestossen, welches ich schon sehr oberflächlich von damals aus der Symfony 1.3-Welt kannte. Die Dokumentation für die 4er Version von Symfony existiert leider noch nicht – zumindest konnte ich Sie nicht finden und so habe ich etwas weiter recherchiert und habe die Seite von Vincent Faliès gefunden: https://vfac.fr/blog/how-install-fosuserbundle-with-symfony-4
Vielen Dank – ich habe diese Anleitung um meine Anforderungen erweitert


Ihr benötigt für dieses Projekt eine Webserver Umgebung, speziell wird benötigt:

  • Apache Webserver
  • Mysql-Datenbank
  • PHP (ich setze hier PHP7.2 ein)

Ich habe mir hierfür eine Virtuellen Server mit Vagrant erstellt. Als Base-Box benutzt ich die Homestead-Box. Ich werde später darüber einen Artikel schreiben. Der Server ist bei mir unter der Domain symfony.test erreichbar (Eintrag im Host-File nicht vergessen!)

1. Symfony installieren

composer create-project symfony/skeleton symfony

Jetzt sollte Dein Symfony Projekt schon erreichbar sein.
Wie oben beschrieben bei mir unter https://symfony.test

erforderliche Symfony Pakete installieren

Apache Pack: wenn der Apache zum Einsatz kommt: liefert die benötigte .htaccess
Ohne diese wird der u.a. Profiler auch nicht funktioniere

 composer require symfony/apache-pack 

Profiler Pack: ein sehr nützliches Paket zum debuggen von Symfony!
Hierdurch wird u.a. auch gleich das Twig-Paket mit installier

composer require symfony/profiler-pack

Doctrine installieren

 composer require doctrine 

Folgende Zeile in der .env an die eigene Umgebung anpassen:

DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name

Annotations installieren

composer require annotations 

SwiftMailerBundle installieren

composer require swiftmailer-bundle 

Translations installieren

composer require symfony/translation

2. FOSUserBundle installieren

composer require friendsofsymfony/user-bundle "~2.0"

Jetzt wirft das Symfony-Projekt einen Fehler:
The child node "db_driver" at path "fos_user" must be configured.
Aber keine Sorge – das Problem wird im Punkt 5 behoben, wenn wir das FOSUserBundle konfigurieren

3. User-Klasse erstellen

jetzt musst Du deine User-Klassse in /src/entity erstellen:

<?php

namespace App\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;


/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

public function __construct()
{
parent::__construct();
// your own logic
}
}

4. security.yaml anpassen

ändere die Datei /config/packages/security.yaml wie folg

security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN

# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers

providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager

logout: true
anonymous: true

# activate different ways to authenticate

# http_basic: true
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate

# form_login: true
# https://symfony.com/doc/current/security/form_login_setup.html

# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
# - { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }

5. FOSUserBundle konfigurieren

Erstelle die Datei /config/packages/fos_user.yaml und füge folgenden Inhalt ein:

fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: App\Entity\User
from_email:
address: "your@email.de"
sender_name: "your@email.de"

aktualisiere die Datei /config/packages/framework.yaml um das Templating zu konfigurieren

framework:
templating:
engines: ['twig', 'php']

6. FOSUserBundle Routing importieren

Erstelle die Datei /config/routes/fos_user.yaml mit folgendem Inhalt:

fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"

7. Datenbank anlegen / Schema update

Falls noch nicht bereits geschehen, solltest Du jetzt Deine Datenbank anlegen (lassen

php bin/console doctrine:database:create 

Aktualisiere das Datenbank Schema, die Tabelle fos_user aus dem User-Model wird angelegt

php bin/console doctrine:schema:update --force

So – das war’s! Es sollte jetzt alles richtig konfiguriert sein.
Ihr könnt es testen indem ihr das Registrierungsformular aufruft:
https://symfony.test/register
Es sollte ein Formular erscheinen, mit dem Ihr registrieren könnt. Sobald ihr das Formular abschickt, sollte im Erfolgsfall ein Datenbank-Eintrag in der Tabelle fos_user erscheinen und das Profiler-Panel sollte Dir anzeigen, dass Du nun als User eingeloggt bist:

Das Symfony Profiler Panel
Das Symfony Profiler Panel

Unter anderem stehen Dir dann folgende Controller direkt zur Verfügung:

  • /register
  • /profile
  • /profile/edit
  • /logout
  • /login
  • /resetting/request

Über die console könnt Ihr dann auch z.B. den Benutzern Rollen zuteilen:

bin/console fos:user:promote


Ein Kommentar zu „Symfony4 mit FOSUserBundle installieren

Schreibe einen Kommentar

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