Dans son tuto découvrir Symfony 2 J.Place fait hériter ses contrôleurs de ContainerAware sans plus d'explication.
Savez-vous quel est la différence entre ContainerAware et Controller et pourquoi l'utilisation du premier plutôt que le second.
Dans son tuto découvrir Symfony 2 J.Place fait hériter ses contrôleurs de ContainerAware sans plus d'explication.
Savez-vous quel est la différence entre ContainerAware et Controller et pourquoi l'utilisation du premier plutôt que le second.
Controller hérite de ContainerAware et Controller fournis des raccourcis sympas qui ne sont pas présent dans ContainerAware
L'utilisation des Controllers est plus indiqué dans le développement de style MVC.
Si tu veux coder des briques plus transversales, il y a toujours les services, très pratiques et très bien gérés par Symfony2.
Je vois pas en quoi c'est plus indiqué, juste que Controller va te faciliter la vie avec ses raccourcis, mais ContainerAware permet de comprendre plus facilement certain mécanisme et rien n'empêche de faire sa propre classe Controller avec des raccourcis supplémentaire. regarde le code des deux classes tu verras ça aide pas mal.
MVC = Modèle - Vue - Controleur
Les Controllers de Symfony2 te permettent facilement d'associer un template Twig (une vue). Donc dans le cas où on souhaite coder style MVC et qu'on a choisis Symfony2, c'est mieux d'utiliser les Controllers déjà bien faits de Symfony2.
Difficile d'être plus logique dans cette explication... Ah si :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if ($framework == 'Symfony2') && ($designPattern == 'MVC') use \Symfony2\Controller\;
Mais tu peux également créer tes propres Controllers dépendant du Controller de Symfony2.
Enfin bref, fais ce que tu veux
... ou créer des contrôleurs plus légers en héritant de ContainerAware...
Si tu regardes le code de la classe Controller, toutes les fonctions sont des raccourcis appelant un service du ServiceContainer (return $this->container->get('un_service')->...). En fait pas toutes, il y a 1 ou 2 qui renvoient un objet Response... Mais finalement, on se rend compte que tout ce que fait la classe Controller peut être fait avec une classe qui hérite de ContainerAware.
C'est très bien d'utiliser le Controller proposé par Symfony2, mais ça peut aussi être très bien de faire le sien en héritant ContainerAware, notamment pour alléger le nombre de raccourcis...
- Mon blog PHP : http://blog.alterphp.com
- "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
Alors le code du Controller symfony : https://github.com/symfony/symfony/b...Controller.php
et celui du ContainerAware :
https://github.com/symfony/symfony/b...ainerAware.php
on peut donc voir que les méthodes du controller ne font qu'une ligne pour la plupart du temps ( voir trois si il y a une gestion d'exception ) et sont des raccourcis, permettant de coder plus vite et d'avoir aussi l'autocomplétion facilité. Je vois donc pas le rapport avec le pattern MVC ( surtout que symfony2 n'est pas un framework MVC), vu que les deux permettent de faire les même chose en autant de ligne de code. juste que c'est plus court par exemple de faire
que faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->generateUrl('maRoute');
EDIT : tu m'as devancé pc.bertineau, je rajouterais, permet de faire aussi des raccourcis plus adapté ( si tu utilise pas doctrine mais propel par exemple, ou doctrine avec mongoDB )
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->container->get('router')->generate('maRoute');
Créer un controlleur plus léger ? C'est déjà super léger comme vous le dites, c'est que des raccourcis
13 au total, et perso je me sers des 3/4.
Pour un débutant je conseille d'utiliser l'existant, au lieu de refaire la même chose juste pour éviter de charger quelques lignes de codes en plus.
Après effectivement c'est bien aussi de creuser et chercher comment cela fonctionne derrière, pour utiliser uniquement les éléments utiliser. Notemment pour des bundles réutilisables, si on est fan de l'optimisation à la ligne près !
Sinon c'est quoi pour vous le MVC ? Je demande simplement, même si c'est hors sujet (désolé), mais ma vision de la chose est sûrement fausse alors.
Tu peux définir une classe MyController héritant de ContainerAware qui fera office de contrôleur web (conceptuellement parlant), et la logique MVC est respectée.
C'est juste une question de nom ici. D'ailleurs il n'y a pas de classe Model dans Symfony2
- Mon blog PHP : http://blog.alterphp.com
- "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
Merci pour vos avis, mais alors il n'y a aucune raison dans le tuto qui est sur ce site pour l'utilisation de ContainerAware, il aurait pu choisir Controleur et ça aurait donné la même chose, il y aurait juste eu peut-être des méthodes différentes ?
Bon on utilise ou l'un ou l'autre comme on veut puisque d'après ce que vous dites j'ai l'impression que l'on peut faire exactement les même choses avec les deux façons, mais en plus ou moins simple.
Oui c'est bien ça, il était temps de conclure
- Mon blog PHP : http://blog.alterphp.com
- "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager