Questions architecture mvc et autoload

Mammouth du PHP | 790 Messages

13 nov. 2012, 18:09

Ok, j'ai bien compris :D
Alors maintenant, c'est la que ça ce complique, je revien sur l'aitoload:
1) index.php envois 2 variables $_GET a module.php $_GET['module'] et $_GET['page'] URL: module.php?module=1&page=contact
2) module.php construit l'objet $module avec $_GET['module'] puis inclus l'index.php du module demander
3) Une fois inclus, index.php construit l'objet $page avec $_GET['page']

mon 1er autoload est dans config.php et il indique le chemin libs/classes/

alors ou et comment placé mon 2eme autoload, celui pour chercher la classe membres du module membres pour l'utiliser dans membres par exemple ?

EDIT: l'archi est la suivante...
  WWW/
  ├── LIBS/ <!-- Classes et fonctions primaire de l'application -->
  │   ├── classes/
  │   │   ├── Connex.class.php <!-- Connexion et requetes -->
  │   │   ├── Module.class.php <!-- Choix du module -->
  │   │   ├── Page.class.php <!-- Choix de la page -->
  │   │   └── Pagina.class.php <!-- Pagination -->
  │   └── fonctions/
  │       └── systeme.php
  │
  └── STIE/
      ├── ADMIN/ <!-- Tous ce qui concerne l'admin -->
      │   └── index.php 
      │  
      ├── MODULES/
      │   │
      │   ├── ACCUEIL/
      │   │   ├── class/ <!-- Les classes propre au module accueil -->
      │   │   │   ├── Accueil.class.php
      │   │   │   └── Contact.class.php
      │   │   ├── accueil.php
      │   │   ├── index.php <!-- Utilise $_GET pour afficher la bonne page si non c'est accueil.php -->
      │   │   └── contact.php
      │   │
      │   │ 
      │   ├── BLOG/
      │   │   ├── class/ <!-- Les classes propre au module blog -->
      │   │   │   └── Blog.class.php
      │   │   ├── accueil.php
      │   │   ├── index.php <!-- Utilise $_GET pour afficher la bonne page si non c'est accueil.php -->
      │   │   ├── lire-blog.php
      │   │   └── liste-blog.php
      │   │
      │   │
      │   └── MEMBRES/
      │       ├── class/ <!-- Les classes propre au module membres -->
      │       │   └── Membres.class.php
      │       ├── accueil.php
      │       ├── index.php <!-- Utilise $_GET pour afficher la bonne page si non c'est accueil.php -->
      │       ├── compte-membre.php
      │       └── liste-membres.php
      │
      │
      ├── TEMPLATE/
      │   │
      │   └── model-1/
      │       ├── _css/
      │       ├── _icons/
      │       ├── _img/
      │       └── _js/
      │  
      │
      ├── config.php <!-- Est inclus dans module.php contient l'autoload des classes primaires libs/classes/ -->
      ├── index.php
      └── module.php <!-- Est chargé de trouver et d'inclure le fichier index.php du bon module grace a $_GET -->
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Eléphant du PHP | 127 Messages

13 nov. 2012, 20:32

A titre perso, voilà comment je procéderai :

1. configuration des modules actifs dans le fichier config.php (ou bootstrap.php)

Un fichier du genre peut très bien l'affaire :
$modules = array(
 'blog' => $SITE_DIR . 'modules/blog/class/',
 'membres' => $SITE_DIR . 'modules/membres/class/'
);
2. chargement de l'autoloading via une classe "Loader"

Exemple :
class Loader {
	
    private static $_map = array();
    
	/**
	 * Initialise les données d'autoloading
	 */
	public static function init() {
	
	    // Core
	    foreach (glob($LIBS_DIR . '/classes/*.class.php') as $path) {
	        self :: $_map[strtolower(basename($path))]  = $path;
	    }
	}

	/**
	 * Appelle une classe via l'autoloading
	 */
	public static function call($class) {
	    if (isset(self :: $_map[strtolower($class) . '.php'])) {
	        include self :: $_map[strtolower($class) . '.php'];
	        return true;
	    }
	    return false;
	}
}
On l'utilise comme ceci (pourquoi pas dans le config.php):
Loader :: init();
// Register autoloader
        spl_autoload_register(array(
            'Loader', 'call'
        ));
Je te laisse adapter en fonction de tes besoins, notamment pour la prise en compte du fichier config.php (pourquoi pas passer le tableau $modules à la fonction init() ?)

3. il est conseillé de placer le tableau Loader :: $_map en cache en situation de production.

Du coup l'autoloading est défini une fois pour toute en fonction des modules que tu souhaites activer ou non.

Mammouth du PHP | 790 Messages

13 nov. 2012, 20:57

Ok, je pense comprendre comment tu procède, ça va peut être même me simplifier la vie...
je regarde ça, merci...
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.