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 :

Rôle précis du Controller


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Par défaut Rôle précis du Controller
    Salut,

    Je débute avec Symfony et je m'interrogeais quant au rôle exact du controller. Ce que je sais, c'est qu'il contrôle les infos reçues par la vue avant d'interroger le modèle et inversement.
    Ce que je voudrais savoir c'est si je dois écrire toute la partie traitement dans chaque méthode de mon controller ou si ce traitement doit être écrit ailleurs (dans un service peut-être?) et que le controller doit se contenter de l'appeller?

    En bref : où écrire le gros du code? Est-ce normal d'avoir des méthodes de 50 lignes dans un controller?

    Merci à tous,
    Noémie.

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    salutation,

    dans le modèle MVC :
    - le controlleur(C) permet d'effectuer les traitements et les accès aux bases.
    Aucun traitement ne doit être effectué dans la vue, enfin le moins possible.

    si tu as 50 lignes de code dans le controlleur c'est normal si tu ne peux pas faire autrement. comme pour tout programme il faut optimiser son code.


    - les services sont là seulement si tu à besoin d'une fonction à plusieurs endroits, c'est une question de reutisabilité.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2013
    Messages : 13
    Par défaut
    Salut dukoid,
    Merci de ta réponse, tu me confortes dans mes idées.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    Personnellement pour un codage plus propre et surtout plus testable, tu peux déléguer le code métier au service. (Pour moi le fait que le contrôleur connaisse l'entity manager est une mauvaise pratique, par exemple).

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public function createAction(Request $request)
        {
            $entity  = new MyEntity();
            $form = $this->createForm(new MyEntityType(), $entity);
            $form->bind($request);
     
            if ($form->isValid()) {
                //C'est ici qu'on se charge de faire les accès base de données
                $this->get('myentity_service')->createMyEntity($entity);
     
                return $this->redirect($this->generateUrl('some_url'));
            }
     
          /*  [...] */
        }

    Comme ca dans ta classe service qui se fait injecter l'entity manager tu as une méthode createMyEntity($entity) qui est testable facilement, et tu as un service qui regroupe les actions "métiers" de ton application


    Ducoup:
    Ce que je voudrais savoir c'est si je dois écrire toute la partie traitement dans chaque méthode de mon controller ou si ce traitement doit être écrit ailleurs (dans un service peut-être? -> OUI) et que le controller doit se contenter de l'appeller? -> OUI

    En bref : où écrire le gros du code? Est-ce normal d'avoir des méthodes de 50 lignes dans un controller? NON (un contrôleur devrait avoir 30 lignes max et encore ca semble énorme)

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    si le code est utilisé qu'une seule fois je ne vois pas l’intérêt de le mettre dans un service.
    de plus si tu as de nombreuses actions, on ne va pas faire un service pour chaque action.

    un service = une fonction qui peut être utiliser de partout qui du coup peut être facilement testable.

    gotolog, le cas que tu présente est un cas de "reutisabilité" donc parfait pour un service mais n'est pas dans la question d'origine.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    Je croyais que la question ici était le découpage du controlleur.D'ailleurs je répond exactement à ses questions.

    C'est le même intérêt que de coder la vue à part du controlleur: une séparation des couches et des responsabilités.
    Ca ne veux pas dire un service pour chaque action mais ca se rapproche plus d'un service par controlleur.

    Si après la soumission d'un formulaire de création d'un utilisateur tu dois faire:
    - l'insertion en base de données
    - l'envoi de mail
    - le log d'une interface externe
    - l'envoi de mail au responsable du groupe de l'utilisateur
    J'espère que tu ne fais pas tout ca dans ton contrôleur.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2011, 18h47
  2. [JAAS][LDAP] Controle des rôles
    Par Nexussmb dans le forum Sécurité
    Réponses: 0
    Dernier message: 08/09/2008, 11h25
  3. Réponses: 3
    Dernier message: 03/09/2007, 19h02
  4. Réponses: 2
    Dernier message: 12/07/2004, 11h43
  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