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

MVC PHP Discussion :

Architecture MVC pour un backend d'administration [ZF 1.8]


Sujet :

MVC PHP

  1. #1
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut Architecture MVC pour un backend d'administration
    Je continue mon aprentissage de MVC et je me pose des questions sur l'architecture d'un site avec back-office d'administration.

    Je vais essayer de mettre en place un exemple :
    J'ai une liste d'objets en base de données

    Dans la partie publique, je dois pouvoir lister ces objets et visualiser la fiche d'un objet

    Dans la partie admin, je dois pouvoir ajouter un objet, en supprimer ainsi que modifier sa fiche.

    Quelle serait les appels nécessaires, et donc les controllers et actions qui leur seront liés ?

    La partie publique, assez facile :

    • listing des objets : monsite.fr/objets/liste
    • visualiser un objet : monsite.fr/objets/view/id/4


    La vraie question est pour la partie admin. Pour l'instant, je m'oriente sur quelquechose comme ça :

    • listing des objets : monsite.fr/objets/liste avec des tests sur l'utilisateur pour savoir s'il est admin. Si oui, afficher les liens de gestion
    • ajouter un objet : monsite.fr/objets/formulaire
    • modifier un objet : monsite.fr/objets/formulaire/id/4 la présence de l'id indique qu'il s'agit d'une modif et non d'un ajout
    • supprimer un objet : monsite.fr/objets/supprimer/id/8

    Cela vous semble-t-il correct ?

    Ne devrais-je pas plutôt créer un controller d'administration pour aboutir à une url de ce style : monsite.fr/admin/modifierobjet/id/5 ?

    Ou encore un module d'administration ?
    Qui serait donc accédé avec une url monsite.fr/admin/objets/modifier/id/6 mais cela m'oblige à redéfinir un controller objetsController dans le module d'admin, non ?

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Une approche à la REST voudrait que l'url de la ressource (l'objet) soit la même que l'on veuille l'afficher, le modifier ou le supprimer. L'action à prendre en charge est dictée par le type de requête http (GET, UPDATE, DELETE).
    Difficile à mettre en place pour l'instant car les browsers ne gèrent généralement que GET et POST

    Perso, j'ai plutôt tendance à opter pour des urls de type "/admin/objets"
    avec la partie admin dans un module en tant que tel.
    Mais le principe de routing et de rewrite n'exclut pas d'avoir une simple url "/objets" tout en redirigeant en interne vers un module différent du module publique (ou différent d'un controller publique)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Points : 230
    Points
    230
    Par défaut
    Hello, étant parti sur une construction MVC complètement modulaire on a choisi de différencier les controllers public et ceux d'admin, ça a le gros avantage de bien se caler avec une gestion d'acl basée sur les modules/controller et action déclarés en base de données.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Points : 171
    Points
    171
    Par défaut
    Je suis également pour l'option 2, c'est d'ailleurs celle que j'adopte pour mon site.
    Le premier point est une histoire de sémantique, le second pour une histoire d'acl, c'est plus facile de dire "rang admin -> acces module admin" que dire "rang admin ->acces a certaines action dans certains controller de certains module"

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Mais cela sous-entend de "dupliquer" certains controllers.

    Dans mon exemple, il faudrait un objetController dans le module par défaut ainsi qu'une controller du même nom dans le module d'admin.
    Ca ne vous dérange pas ? (vraie question, aucune ironie)

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Points : 171
    Points
    171
    Par défaut
    "Dupliquer" ? Pas vraiment, c'est juste le même nom. Tu peux considérer ça comme un espèce d'espace de nom pour les contrôleurs ^^

    Ca ne me dérange pas, si ça te gêne, rien ne t'empêche de l'appeler AdminObjetController Cela dit, quand tu va l'appeler via l'aide de vue d'url, ça fera un peu répétition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->url(array(module=>'admin',controller=>'adminobjet',action=>'editobjet'));
    //Au lieu de 
    $this->url(array(module=>'admin',controller=>'objet',action=>'edit'));
    C'est plus lisible non ?

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Oui je parlais juste de duplication au niveau du nom.
    Mais s'il s'agit des pratiques, ça ne me dérange pas. Le but du jeu étant d'utiliser des normes communes afin qu'une autre personne puisse debugger mon code.
    A priori, chercher un nom de controller à plusieurs endroits me semblait plus compliqué, mais s'il s'agit de normes plus ou moins connues, le problème est moins grave.

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CakePHP 3.0 : stabilisation pour le framework PHP qui propose une architecture MVC
    Par Darkaurora dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 31/03/2015, 17h39
  2. Architecture MVC pour un Bomberman
    Par Celes_Vongola dans le forum Débuter
    Réponses: 13
    Dernier message: 16/06/2012, 23h15
  3. Architecture MVC et espace d'administration
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 11/11/2010, 20h28
  4. Réponses: 5
    Dernier message: 09/06/2009, 00h21

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