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

Langage PHP Discussion :

spl_autoload_register dans plusieurs dossiers


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Points : 137
    Points
    137
    Par défaut spl_autoload_register dans plusieurs dossiers
    Bonjour à tous,

    J'ai ce bout de code qui permet d'implémenter automatiquement l'injection des classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    	function loadingClass($class) {
    		require $class . '.class.php';
    	}
    	spl_autoload_register('loadingClass');
    ?>
    Le problème, c'est que j'ai plusieurs dossiers dans mon projet. Ce qui fait que si la page qui appelle la fonction est dans le même dossier que la classe à importer, tout se passe bien. Mais si ce n'est pas le cas, ça plante et php me dit qu'il ne trouve pas la classe dans le dossier blablabla...

    Y a-t-il un moyen pour que, quelque soit l'endroit qui appelle cette méthode, tout se passe bien ?

    Je vous remercie d'avance.

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Je dirais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    	function loadingClass($class) {
    		require __DIR__ . DIRECTORY_SEPARATOR . $class . '.class.php';
    	}
    	spl_autoload_register('loadingClass');
    ?>
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Points : 137
    Points
    137
    Par défaut
    Malheureusement non... Il reste dans le dossier ou se trouve la méthode...

    Peut être que si je poste une partie de mon code ça ira mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    	include('controler/autoload.php'); // Méthode autoload. Se trouve dans root/controler
    	$db = new DB(); // Se trouve dans root/model
    	$dao = new HeaderDAO($db); // Se trouve dans root/controler
    ?>
    Et avec le code de BornBanane, il reste dans root/controler "Warning: require(D:\xampp\htdocs\cms\controler\DB.class.php)"

  4. #4
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    D'accord je vois mieux.
    Je pensais que toutes tes classes se trouvaient dans le même répertoire que le fichier autoload.php.

    Ici tu veux charger des classes issues de différents répertoires.
    Quelque choses de simple à faire serait d'utiliser la convention de nommage à la Zend (http://framework.zend.com/manual/1.1...nventions.html).

    En gros ta classe DB deviendrait Model_DB et serait dans le fichier root/Model/DB.php

    Autre exemple, le fichier root/API/Foo/Bar.php contiendrait une classe API_Foo_Bar.php

    Comme cela, il suffit juste de faire une petite modification dans la fonction loadingClass :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function loadingClass($class) {
    		require __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR  . strtr($class, '_', DIRECTORY_SEPARATOR) . '.class.php';
    	}
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 123
    Points : 137
    Points
    137
    Par défaut
    Merci beaucoup, ça fonctionne super bien !!!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/09/2009, 17h06
  2. [Batch] tri fichiers dans plusieurs dossiers
    Par brunovn dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 21/07/2009, 15h38
  3. Réponses: 1
    Dernier message: 13/10/2008, 08h17
  4. Enregistrer les logs dans plusieurs dossiers
    Par Guillaume.G dans le forum Apache
    Réponses: 1
    Dernier message: 15/07/2008, 11h28
  5. [Tableaux] Image aléatoire dans plusieurs dossiers
    Par Gunner4902 dans le forum Langage
    Réponses: 13
    Dernier message: 11/12/2007, 17h39

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