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:
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“