Object Relational Mapping sous Symfony : Doctrine Fixtures Bundle

Un Bundle est un répertoire dans un projet Symfony qui intègre une structure bien définie, ce répertoire permet d’implémenter plusieurs fonctionnalités qui peuvent être utilisées dans d’autre projet Symfony. On peut voir un Bundle comme un plug-in dans Symfony.

Les fixtures vous permettent de charger de façon expérimentale des données dans votre base. Oui c’est aussi simple que ça mais déjà faudrait savoir comment faire. Bien sûr le préalable serait d’installer le bundle dans votre projet. Comment faire ? Je vous invite consulter la documentation ici

Une fois fait, vous pouvez maintenant préparer vos fixtures. Rendez vous dans votre bundle de travail dans le répertoire src/VotreBundle/ puis créez un dossier DataFixtures dans lequel vous créerez un autre dossier ORM. En principe vous devriez l’avoir compris en lisant la documentation car je vous le rappel ici nous ne reprenons pas la documentation mais je vous montre l’intérêt d’utiliser Symfony vos projets web en vous expliquant tous les fondamentaux. Alors pour continuer, vous devrez créer un fichier PHP dans votre dossier ORM. Pour mieux vous retrouver, je vous conseille de le nommer en fonction du nom de l’entité sur laquelle vous voulez agir. Dedans vous aurez à mettre votre syntaxe PHP les informations qui seront enregistrés dans votre table. Ce n’est rien de compliqué, je vais vous montrer un exemple :

J’attire particulièrement votre attention sur ce qui est encadré parce que tout ce que vous écrirez dans votre code n’aura aucun sens si vous ne déclarez pas l’entité visée par votre fixture. Ici il s’agit de l’entité User. Je vous l’avais dit dès le premier article, il existe des Bundles de gestion d’utilisateurs tel que FOSUserBundle qui définit déjà les propriétés de l’entité utilisateur.

Ce que vous voyez à l’air relativement clair et logique. Décortiquons ensemble le code. Dans un premier temps on crée l’utilisateur : $user1 = new User().

Vous signalez à l’entité que vous ajoutez une nouvelle ligne dans la table. Ensuite vous nommez cet utilisateur $user1->setUsername(‘admin’).

Vous enregistrez son email $user1->setEmail(‘admin@xyz.com’).

Ensuite passez le compte en mode ‘actif’ $user1->setEnabled(‘1’) et ajoutez un mot de passe $user1->setPassword( $this->get(‘security.encoder_factory’) ->getEncoder($user1)->encodePassword(‘osirus’,$user1->getSalt() ) ). Avec Symfony vous avez la possibilité d’utiliser différentes méthodes de hashage pour vos mots de passe. Veuillez consulter le fichier security.yml ou rendez vous sur le site de symfony pour plus de details ici .

N’oubliez pas de persistez et de flusher. Vous allez sans doute me demander ce que c’est. Généralement pour vos fixtures vous aurez à utiliser les méthodes : load qui vous donne accès à un objet de type ObjectManager qui vous permet de sauvegarder vos entités vers la base ; persist qui relaye à Doctrine que l’entité devra être sauvegardée et le flush quant à lui sauvegarde toutes les entités marquées pour la sauvegarde en lançant toutes les requêtes SQL correspondantes. Vous avez aussi les méthodes addReference et getReference qui respectivement permettent de sauvegarder une référence vers une entité et de récupérer exactement le même objet via son nom.

Il ne vous reste alors qu’à charger vos fixtures et pour cela vous avez le choix : charger toutes les fixtures (y compris celles concernant les autres entités) ou charger uniquement pour l’entité de votre choix. Là encore vous avez le choix entre vider le contenu précédent ou ajouter simplement vos données (au risque de créer des doublons). Veuillez revoir la documentation pour plus de détails et obtenir également les commandes correspondantes à chaque cas.

Nous arrivons au terme de notre brève présentation de DoctrineFixturesBundle. J’espère qu’elle vous aura été utile et vous aura permis de comprendre une fois de plus à quel point Symfony est taillé pour vous faciliter la tâche dans la réalisation de vos projets web. Merci pour votre attention et à très bientôt !

Like what you read? Give Osirus Djodji a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.