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

Bibliothèques et frameworks PHP Discussion :

[Smarty] Arborescence MVC Smarty


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut [Smarty] Arborescence MVC Smarty
    Bonjour,

    j'aimerais avoir votre avis concernant l'arborescence de mon projet. Ce projet doit suivre un pattern MVC, utiliser Smarty pour les templates ainsi qu'être multilingues avec gettext.

    +/
    ../models/
    ............/module1.m.php
    ............/module2.m.php
    ../controllers/
    ................./module1.c.php
    ................./module2.c.php
    ../tpls/
    ........./templates/
    ......................./module1/*.tpl
    ......................./module2/*.tpl
    ........./templates_c/
    ........./cache/
    ../locale/
    .........../fr_FR/
    ..................../LC_MESSAGES/
    .........../en_EN/
    ..................../LC_MESSAGES/
    ../include/
    ............/js
    ............/jquery
    ............/css
    ............/images
    ../smarty/
    ............/internals
    ............/plugins
    ../index.php

    index.php est mon front controller, il se chargera de répartir les requêtes sur les controllers concernés. Puis affiche le template qui se trouve dans tpls/templates/moduleX/*.tpl

    Cela paraît-il cohérent?
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello,

    Il est généralement d'usage de séparer la partie applicative de la partie publique de façon à pouvoir protéger les répertoires sensibles à a donner plus de cohérence à notre arborescence.

    Personnellement, j'utilise une arbo proche de celle du Zend Framework:
    /application/
    + config/
    + + application.ini
    + + bootstrap.php
    + controllers/
    + models/
    + view/
    + + helpers/
    /libraries/
    + unelib/
    + uneautrelib/
    /public/
    + scripts/
    + images/
    + templates/
    + styles/
    + index.php
    .htaccess

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    ok je suis d'accord mais quelle différence tu fais entre tes views de ton dossier /application/ et les templates dans ton /public/ ?

    et ton bootstrap.php te sert à quoi? car mon "bootstrap" c'est l'index.php.

  4. #4
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Bonjour,

    Je me pose une autre question concernant les contrôleurs. Comment structurez vous vos contrôleurs? est-ce un immense switch case? ou utilisez vous une autre structure?

    merci d'avance

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Désolé de pas être venu plus tôt, je suis pas mal pris en ce moment.

    Dans le MVC, il est primordial de bien comprendre le rôle du routeur: c'est lui qui en fonction de la demande du client va appeller le(s) bon(s) controlleur(s). Cela se fait généralement au moyen de routes prédéfinies, regarde du coté de CakePHP, il fait ça très bien tu peux t'en inspirer.

    Un contrôleur caractérise une route, une section si tu préfères, et ses méthodes caractérisent des actions. Par exemple, pour poster un commentaire sur un article, on pourra avoir: monsite.com/article/xxxx/post (forme réécrite de
    monsite.com/index.php?rt=article&act=post&id_article=xxx).
    Coté PHP tu aura un contrôleur "ArticleController" qui porte une méthode de classe "post".
    Généralement, on affecte une action par défaut à tous nos contrôlleurs, le moyen le plus simple d'avoir une structure commune est de passer par une classe abstraite "BaseController":
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    abstract class BaseController {
     
      protected static $_request;
      protected static $_response;
     
      abstract public static function index (); // action par défaut
     
      final public static function setRequest (Request &$request) {
        static::$_request = $request;
      }
     
      final public static function setResponse (Response &$response) {
        static::$_response = $response;
      }
    }
     
    class ArticleController extends BaseController {
     
      public static function index () {
     
        $list_articles = Articles::list(0,10);
        return compact('list_articles');
     
      }
     
       public static function post () {
     
        if (static::$_request->email, static::$_request->comment) {
           $result = Article::create(static::$_request->email, static::$_request->comment);
        else $result=  false;
     
     
         return compact('result');
       }
    }
    Le routeur va alors récupérer le retour du contrôleur qu'il à appellé et va passer tout ça à la vue pour l'affichage.

  6. #6
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    D'accord je vois, ma vision du contrôleur est différente de celle que tu as donné. J'ai déjà utilisé le framework symfony donc je comprends très bien le système de route. Tu as un contrôleur par classe toi.

    Moi ma vision (beaucoup plus simpliste) était plus du genre, un contrôleur pour un module du style :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $action = secure($_GET['act']);
    switch($action){
    case "post" : 
       traitement...
    break;
    default : 
        traitement ..
    }

    et mon "routeur", soit index.php. Il vérifie que le module demandé existe bien, puis charge le contrôleur correspondant. Et c'est dans les contrôleur que je vais vérifier l'intégrité des données avant d'utiliser les méthodes de mes modèles.

    car avec ta méthode, je ne vois pas où tu testes l'intégrité de tes données?

    dans tous les cas mon but n'est pas de réécrire un framework complet mais juste de bien séparer les M-V-C

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/02/2012, 16h00
  2. [Smarty] problème avec l'arborescence
    Par gtraxx dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 09/01/2008, 14h02
  3. [Smarty] Utilisation de Smarty avec MVC
    Par bendede dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 15/11/2007, 15h12
  4. Modifier l'arborescence MVC
    Par esolarc dans le forum MVC
    Réponses: 12
    Dernier message: 28/08/2007, 09h40
  5. [Smarty] Problème Smarty MVC
    Par mnr_nfo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/04/2007, 16h14

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