FosUserBundle : gestion des utilisateurs
Avec 2200 étoiles sur GitHub, FosUserBundle est la solution populaire pour gérer les utilisateurs de votre projet Symfony. Afin de mettre en place ce bundle, il est essentiel de lire la procédure fournie et de respecter toutes les étapes. Si vous ne complétez pas la procédure jusqu’à la fin, votre environnement Symfony ne fonctionnera plus et vous affichera des erreurs.
Créer une branche FosUserBundle
Pour bien débuter, il est donc proposé de créer une nouvelle branche git avant de lancer la procédure.
1 |
$ git checkout -b FosUser |
Configuration YAML
La procédure vous demandera de modifier plusieurs fichiers de configuration YAML. Notez que l’indentation est très importante pour ce type de fichier. De plus, il est recommandé d’utiliser des espaces et non des tabulations pour l’indentation.
Configurer FosUserBundle
Voici les procédures officielles afin de mettre en place FosUserBundle.
Il est possible de le configurer en 25 minutes. Je vous propose donc la technique Pomodoro afin de vous consacrer à cette tâche durant les 25 prochaines minutes.
Voici le chronomètre Pomodoro pour vous aider.
Getting Started With FOSUserBundle (The Symfony Bundles Documentation)
http://symfony.com/doc/current/bundles/FOSUserBundle/index.html
GitHub – FriendsOfSymfony/FOSUserBundle: Provides user management for your Symfony2 Project.
Compatible with Doctrine ORM & ODM, and Propel.
https://github.com/FriendsOfSymfony/FOSUserBundle
Créer des fixtures pour FosUserBundle
Une fois l’installation complétée, vous devriez avoir une table nommée fos_user, dans votre base de données. Afin de la remplir avec des données de tests (fixtures), voici quelques pistes.
Le code fixtures pour FosUserBundle
Si la théorie des fixtures est loin, je vous propose de retourner à l’article « mettre en place des fixtures pour créer des données de tests ».
Afin de créer des fixtures pour FosUserBundle, quelques notions supplémentaires sont nécessaires. Il faudra utiliser le système d’injection de dépendance de Symfony afin de récupérer le service de création d’utilisateur fourni par FosUserBundle.
Voici le code PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
<?php namespace Acme\AppBundle\DataFixtures\ORM; use Acme\AppBundle\Entity\User; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\Common\DataFixtures\OrderedFixtureInterface; use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; class LoadUserData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface { /** * @var ContainerInterface */ private $container; /** * Load data fixtures with the passed EntityManager * @param ObjectManager $manager */ public function load(ObjectManager $manager) { $userManager = $this->container->get('fos_user.user_manager'); $user = $userManager->createUser(); $user->setEmail('admin@admin.com'); $user->setPlainPassword('admin'); $user->setEnabled(true); $user->addRole('ROLE_AS'); $this->addReference('user-admin', $user); $userManager->updateUser($user); } /** * Sets the container. * @param ContainerInterface|null $container A ContainerInterface instance or null */ public function setContainer(ContainerInterface $container = null) { $this->container = $container; } /** * Get the order of this fixture * @return integer */ public function getOrder() { return 2; } } |
Obtenir le container
En implémentant l’interface ContainerAwareInterface, il faudra créer la méthode setContainer. Grâce à cette méthode, Symfony sera en mesure de nous injecter un container. Par la suite, ce container nous donnera la possibilité de charger des services.
1 2 3 4 |
public function setContainer(ContainerInterface $container = null) { $this->container = $container; } |
container->get
Une fois le container disponible, il suffit d’appeler la méthode get pour obtenir le service user_manager fourni par FosUserBundle.
1 |
$userManager = $this->container->get('fos_user.user_manager'); |
La console et FosUserBundle
Il est intéressant de constater qu’une fois l’installation terminée, votre console sera augmentée avec quelques commandes offertes par FosUserBundle.
1 2 3 4 5 6 7 8 |
$ bin/console | grep fos:user fos:user:activate Activate a user fos:user:change-password Change the password of a user fos:user:create Create a user fos:user:deactivate Deactivate a user fos:user:demote Demote a user by removing a role fos:user:promote Promotes a user by adding a role |
Laisser un commentaire
Participez-vous à la discussion?N'hésitez pas à contribuer!