Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

Créer un gestionnaire de collections avec Symfony3

Créer un service pour gérer l'objet de formulaire

Testez gratuitement nos 1341 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Les services vous permettent de sortir des éléments de logique métier de vos contrôleurs et de rendre ce code générique et réutilisable. Pour votre formulaire, il y a un intérêt à avoir un service qui viendra gérer les mises à jour de l'objet.
08:23

Transcription

Allez, pour cette dernière petite vidéo Code, oui, parce qu'elle presse avec beaucoup de points blancs, on va discuter un petit peu de certaines choses qui sont importantes et on ne va pas vraiment faire de Code. Donc, je suis désolé, c'est vrai, on arrive un peu au bout de la formation, c’est un peu triste, mais c'est comme ça. On va parler des services. Alors, je me suis amusé de mon côté de ce que vous allez pouvoir pendant un petit peu de temps, pour le refaire vous aussi à simplifier au maximum les actions que j'ai dans mon Contrôleur « Items Contrôleur » par un service. Pourquoi est-ce que j'ai fait ça ? Tout simplement pour réduire l'impact du Code dans mes actions et du coup avoir un service qui fait les choses à la place de mes actions. Vous allez voir que c'est extrêmement intéressant de fonctionner comme ça et que si vous souhaitez aller plus loin avec Symfony, vous n'aurez pas le choix, vous devrez passer par les services automatiquement. Alors je vais vous montrer ce que j'ai fait étape par étape. D'abord, la première chose à faire, quand on veut travailler les services, ça va être de créer une classe, une classe toute simple, que vous allez placer automatiquement toujours dans un dossier « Services ». Vous créer un dossier « Services », vous créer une classe php, tout ce qu'il est plus simple, « item manager » par exemple. Et dans ce « item manager » vous allez avoir un Constructeur dans lequel vous allez injecter des dépendances. On n'a pas parlé encore, c'est vrai, des dépendances dans symfony. Mais vous avez la possibilité d'injecter d'autres services de symfony dans votre service via le Constructeur, c'est comme ça que ça fonctionne. Vous injecter directement via le Constructeur d'autres services. Alors, moi, je me suis basé sur deux services, je me [inaudible] sur l'entité manager, qui me permet de récupérer [inaudible] Repository, et également le Token storage, qui va me permettre, et ça c'est un service Symphony qui permet de le faire, de récupérer l' [inaudible] en cours et l'utilisateur. Comment fonctionne l'injection dépendance à partir de cet endroit-là ? Et bien, avec ensuite une définition de votre service, dans le fichier « Services.yml » qui se trouve dans « app.config ». Et [inaudible] ça marche, on va simplement [inaudible] venir définir « item manager » qu'on met en service à nous personnaliser. On va définir sa classe et là, j'utilise à cet endroit-là paramètre que j'ai défini plus haut. Alors, je vous conseille de faire comme ça, ce n'est pas obligatoire, on peut mettre directement la classe à cet endroit-là. Mais quand on va faire comme ça, on va avoir ici toutes les classes en haut dans les paramètres, c'est beaucoup plus propre. Faites très attention juste à une chose, quand vous utilisez des paramètres comme ça, ou que vous allez injecter des services comme on va le voir juste en-dessous, pensez bien à mettre ces clés-là entre guillemets, parce que le [inaudible], sinon, mais de « yml », ne pourra pas détecter ces paramètres, en décadrer pourcentage ou décadrer arobase, la tendance a vraiment comprendre ce qui se passe. Alors, maintenant qu'on a ça, on définit donc la classe, OK, commettant notre classe finale, c'est très bien « bundle services »,« item manager ». Et en-dessous on définit un vrai argument, et ces arguments vont correspondre en tous points aux services que vous souhaitez injecter dans votre constructeur. Regardez bien, ici j'ai doctrine « orm default entity manager » et à côté j'ai le « security.token storage ». Et ça correspond exactement aux deux injections que j'ai à cet endroit-là. Voilà comment fonctionne l'injection Dépendance, ensuite c'est Symfony qui fait sa petite tambouille derrière, et qui absolument tout tout seul. A partir de là, on est tranquille, on peut travailler. Étant donné qu'on est en objet, je place ça dans les variables ici, objet, et j'ai comme ça un fonctionnement à l'intérieur de mon service. Je peux rappeler absolument partout les différentes instances dans « item manager », Repository, « token storage » etc. Si vous voulez savoir quel services sont disponibles dans Symfony, n'oubliez pas d’utiliser la Console, et d'utiliser donc, la commande « debug:container » donc, « bin console debug: container » va vous donner la liste de tous les services que vous pouvez utiliser. Ça c'est vraiment génial. Donc, usez-en, regardez ce que vous pouvez utiliser, vous verrez que absolument tout, et puis si vous avez toutefois la possibilité d’utiliser la « grêpe » sur votre système, faites un petit grêpe avec un mot, ça vous donnera des informations, par exemple, pour l'« orm », on saura tout ce qui comporte « orm ». Faites attention, il y a beaucoup de formes qui vont sortir évidemment avec « orm ». Mais on peut avoir aussi voilà, toutes les commande en doctrine pour [inaudible] quelque chose. Et ça, ça nous donne des informations, notamment on trouvera la clé ici. « Doctrine orm default entity manager » qui est l'entité manager de doctrine. Maintenant que mes injections sont faites, pourquoi j'ai utilisé un service ? Ce service je vais l'appeler à chaque fois dans mon Contrôleur et je vais créer à chaque fois des fonctions qui vont permettre par exemple, ici, de voir si le formulaire est valide, et de créer l'item récupérant le « data » et ensuite de passer par des méthodes internes de mon service que je recrée qui vont me permettre de ne plus avoir de duplication de Code et de rendre mon Code beaucoup plus simple, beaucoup plus lisible, beaucoup plus facile à utiliser. Ce qui est génial, c'est que regardez. Mon « add action » ici, maintenant je vais appeler mon item manager. Et puis, je vais créer d'item parce que j'en ai besoin pour la construction du formulaire. Je vais faire un Request, parce que tout ça est un peu obligatoire quand même. Et derrière si la forme est valide, je vais appeler mon item manager et je vais utiliser une méthode sympa, cette forme pour lui ajouter en fait, un objet de formulaire qui va pouvoir gérer et ensuite je vais appeler [inaudible]. Alors, je montre cette forme, parce qu'il est assez intéressant. Mais cette forme que j'ai fait là, en fait est simplement une petite méthode toute bête, Je vais faire porter le formulaire à mon service, avec cette forme, je permet en fait à mon service d'instencer sur lui-même. Dix forme est de remplir avec mon formulaire. Et je fais un Return 10. Pourquoi je fais ça ? Parce qu'en retournant à la forme de l'exécution de cette fonction, le service lui-même, je permet ce qu'on appelle le chaînage, c'est-à-dire je peux faire en cette forme, et juste derrière appeler la méthode « creat ». La méthode « creat » qui est en fait, la méthode « creat » de mon service. Et en faisant ça, je peux du coup généraliser le « creat » et le « update » puisque je peux faire en cette forme à cet endroit-là, et si on descend un petit peu plus bas dans l'« update » ici, je vais faire également à cette forme. Le service vous permet de généraliser les informations, le service vous permet d'avoir des fonctionnalités plus petites, souvenez-vous, n'arrêtez pas d'appeler à chaque fois dans toutes nos actions ici, le Ripository, Cette fois-ci il est appelé une seule fois à la création de mon service ici. et je n'ai plus besoin de leur appeler à chaque fois , je l'ai écrit une seule fois. Alors, dès que vous commencez à avoir un peu trop d'informations dans vos actions vous voyez que vous répétez beaucoup les choses. OK. Prenez un petit peu de distance. Créez un service. Dans ce service mettez tout ce dont avez besoin. Une seule fois et ensuite appelez ce service et travaillez avec. Vous allez voir que ça va vous permettre de simplifier ces informations à l'intérieur de vos Contrôleurs. Et ici, ça vous permet surtout d'avoir un Code plus simple et de ne faire que ça, c'est-à-dire tout le temps, regardez donc, toutes les actions, les appeler juste à ces services-là, et à une méthode. Et vous déplacez la logique. Et votre logique, elle est portée directement dans un service. On n'est pas obligé d'appeler Manager, on l'appelle comme on veut. Moi, j'aime bien appeler ça Manager. En l'occurrence mais vous faites ce que vous voulez faire. Ça ne vous empêche pas en plus de ça de venir mettre toutes les actions importantes, par exemple, les appels au Repository , en get collection. Je me fais des méthodes proxi qui sont dans mon service, comme ça toute ma logique est dans le service. Ça s'est super bien de fonctionner comme ça. Parce que du coup vous généraliser et imaginons que j'ai besoin de tous ces appels-là ailleurs, Je n'ai plus besoin de faire un appel au Repository, directement dans mon Contrôleur. En fait, je vais abstraire dans mon Contrôleur la logique de récupération des infos, et si demain je me dis, eh bien, que ce n'ai plus le Repository, mais que c'est, je ne sais pas moi, un Web service sur lequel je vais chercher des informations. Etant donné que c'est généralisé, je le change ici et ça le changera partout où j'ai appelé mon get collection. Donc, pensez à ça, c'est hyper important. Travaillez en service et ça va vous permettre très facilement eh bien d'avoir un Code très simple. Je répète les étapes. On crée bien sûr un service. On réfléchit les injections dépendances, Dans le service.yml on déclare son service. Avec la bonne classe on place les arguments des différents services Symfony, même des services qu'on a déjà créé, que l'on souhaite à injecter à l'intérieur. Et ensuite, on vient de l'utiliser à l'intérieur de nos actions.

Créer un gestionnaire de collections avec Symfony3

Développez une application de gestion de ressources avec Symfony. Prenez en main le DQL (Doctrine Query Language) ainsi que les formulaires, la sécurité, les tests, etc.

2h12 (25 vidéos)
Super cours
Michel J.
J'aime bien le cours, surtout la partie Service
 
Logiciel :
Spécial abonnés
Date de parution :19 avr. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !