Archives de catégorie : Symfony

[Symfony 4] – Gestion des utilisateurs sans FosUserBundle Chapitre 2

Un court chapitre où nous allons juste implémenter la fonction de connexion d’un utilisateur.

Pour cela nous allons avoir besoin de faire encore un peu de configuration, nous allons tout d’abord mettre à jour le firewall principal du fichier secrity.yaml :

On va aussi modifier le fichier framework.yaml pour y ajouter la gestion des sessions et la protection xcrf

On va créer notre controller de login et logout, rien de compliqué, dans App/Controller/SecurityController.php :

Si ce n’est pas déjà fait, on va créer 1 controller qui contiendra 2 routes : index et admin

La page index sera la landing page de notre site, la page admin sera la partie sécurisée où seul les admins seront autorisés à y accéder :

Et les templates qui vont bien :

index.html.twig

Admin/index.html.twig

On va aussi créer un template pour notre formulaire de connexion, Security/login.html.twig

A ce point et si on a rien oublié on doit pouvoir se connecter en accédant à la page /login et en saisissant les identifiants qui sont dans votre fichier fixtures.

Dans le prochain chapitre nous verrons comment un utilisateur peut s’inscrire sur le site.
Vous pouvez retrouver les sources complètes ici : https://github.com/gponty/userDemo

[Symfony 4] Gestion utilisateurs sans FosUserBundle

Après « Comment utiliser FosUserbundle« , comment se passer de FosUserBundle !

Mais à l’heure où j’écris ces lignes il n’y a de toute façon pas le choix puisque FosUserBundle n’est pas encore compatible avec Symfony 4.

Plutôt que d’attendre qu’il le soit, j’aurai pu y contribuer, mais j’ai préféré me retrousser les manches et mettre les mains dans le cambouis pour développer ma propre solution de gestion des utilisateurs.

Ceci afin de ne pas être dépendant de FOSUserBundle et devoir attendre qu’il soit compatible avec les dernières version de Symfony, mais surtout de bien comprendre les mécanismes de sécurité de Symfony (et aussi parce que ça faisait longtemps que j’avais écrit sur ce blog).

D’abord on prend un papier et un stylo et on répond à la question : Que doit faire un système de gestion des utilisateurs ?

On va commencer par des réponses simples :

  • Inscription d’un utilisateur
  • Connexion de l’utilisateur
  • Affecter des droits (rôles)
  • Récupérer son mot de passe
  • Remplacer son mot de passe

Dans cette 1ere partie nous allons juste voir la création de notre entité User.

Afin de mettre en place tout ça on va commencer par créer un projet Symfony 4 (pour ça il faut absolument php 7.1, sinon ce sera du symfony 3.4)  :

Puis ajouter tous les composants que l’on aura besoin :

Doctrine et maker pour générer des controllers, entity :

Gestion de la sécurité :

Moteur de template Twig :

Toolbar debug :

Annotations :

Validation :

Gestion de fixtures :

Pour créer la base de donnée, on met à jour notre config dans le fichier .env :

puis pour la créer dans mysql :

On va aussi creer notre 1er controller :

On va maintenant créer notre Entité User, c’est celle ci qui contiendra toutes les données de l’utilisateur (username, email, mot de passe, …) :

On a donc un nouveau fichier dans src/Enity/User.php :

On met la base à jour :

Nous allons tout de suite créer un utilisateur en utilisant les fixtures (c’est-à-dire des exemples de données), il faut d’abord ajouter un encoder dans le fichier security.yaml :

Créer le fichier src/DataFixtures/AppFixtures.php

Il n’y a plus qu’à charger les fixtures :

Et si tout va bien vous devez avoir dans votre base 3 utilisateurs :

Dans le prochain chapitre nous verrons comment se connecter.

En attendant vous pouvez retrouver l’ensemble des sources ici : https://github.com/gponty/userDemo

[Symfony 4] Generate entities

Si comme moi vous aviez l’habitude de creer vos getters et setters à l’aide de la commande :

[php] php bin/console doctrine:generate:entities [/php]

Sachez que vous pouvez encore l’executer dans Symfony 4 mais qu’elle ne vous renverra qu’une erreur. Néanmoins la plupart des éditeurs de texte ont une option ou extension pour le faire.

Source : https://github.com/doctrine/DoctrineBundle/issues/729

Tri des oneToMany

Lorsque vous voulez trier une relation OneToMany d’une entité, par exemple :

Il suffit d’ajouter un @ORM/OrderBy({« attribute » = « ASC », « attribute2 » = « DESC »}), ce qui donnera pour notre exemple :

Pratique et indispensable !

DQL MEMBER OF

Lorsque vous avez une relation ManyToMany du style :

Et que vous voulez ramener toutes les lignes contenant ce critère, il suffit de faire  :