IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

ContainerAware Vs Controller


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Points : 65
    Points
    65
    Par défaut ContainerAware Vs Controller
    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.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    Controller hérite de ContainerAware et Controller fournis des raccourcis sympas qui ne sont pas présent dans ContainerAware

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    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

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    ... 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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->generateUrl('maRoute');
    que faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->container->get('router')->generate('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 )

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    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.

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 63
    Points : 65
    Points
    65
    Par défaut
    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.

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    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

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    195
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 195
    Points : 511
    Points
    511
    Par défaut
    Citation Envoyé par Guybrush113 Voir le message
    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 !
    Justement pour les débutants ContainerAware peut permettre de mieux comprendre comment fonctionne symfony2, en tout cas moi ça m'a permis de mieux comprendre

Discussions similaires

  1. [VB6] [Réseau] Prendre le contrôle d'un téléchargement
    Par Tchetch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/10/2002, 14h18
  2. [VB6] [Interface] Nbre de contrôles maxi dans une feuille
    Par Midou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/10/2002, 16h09
  3. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  4. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30
  5. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo