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 :

Implémentation autoload PSR-?


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de Gecko
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Décembre 2008
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Décembre 2008
    Messages : 499
    Points : 1 277
    Points
    1 277
    Par défaut Implémentation autoload PSR-?
    Bonjour!

    Je cherche un moyen d'implémenter l'autoload avec la norme PSR-? la mieux adaptée à mon projet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /model/ # contiens mes classes gérant les API
    /api/monapi1/model/   # classes dédiées de mon api 1
    /api/monapi1/view/    # vues spécifiques à l'api 1
    /api/monapi2/model/   # ect ect...
    Dans mon projet j'ai l'index.php qui charge ma classe /model/api

    Ensuite ma classe api charge dynamiquement les api situées dans /api/ après avoir effectué différents tests.

    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
    37
        public function __run(array $config) {
            $this->config = json_decode(json_encode($config));
     
            // Définition du header et langage de sortie pour la fonction display
            $this->config->output = isset($this->config->output) &&  trim($this->config->output) != '' ? $this->config->output : 'json';
     
            // Test de la validité du nom de l'API
            if(preg_match("#^[[:alnum:]]{3,9}$#",$this->config->appname)) {
                $appName = $this->config->appname;
            } else { $this->display(array('error' => array('id' => '0x02', 'msg' => 'Invalid API name')),$this->config->output); return false; }
     
            // Test de l'existence du dossier de l'API
            if(is_dir(dirname(__FILE__).'/api/'.$appName) && $appName != 'Model') {
                // Test de l'existence du fichier de la classe de base de l'API
                if(file_exists(dirname(__FILE__).'/api/'.$appName.'/'.$appName.'.php')) {
                    // Appel du fichier de la classe
                    require_once dirname(__FILE__).'/api/'.$appName.'/'.$appName.'.php';
                    // Test de la possibilité d'instancier l'API
                    $reflectionClass = new ReflectionClass($appName);
                    if($reflectionClass->IsInstantiable()) {
                        // Instanciation de la classe
                        $api = new $appName;
                        // Test de l'instance de l'API (doit être runnable)
                        if($api instanceof runnable) {
                            // Démarrage de l'API
                            $api->run($this);
                            // if $api->config->licence_required === true (Identification de la licence pour l'API)
                            // Définition du langage de sortie
                            $output = in_array($this->config->output, $api->config->outputs) ? $this->config->output : 'json';
                                // Affichage du résultat
                            $this->display($api->data, $output);
                        } else { $this->display(array('error' => array('id' => '0x06', 'msg' => 'API is not runnable')),$this->config->output); }
                    } else { $this->display(array('error' => array('id' => '0x05', 'msg' => 'API is not recognized')),$this->config->output); }
                } else { $this->display(array('error' => array('id' => '0x04', 'msg' => 'Missing API')),$this->config->output); }
            } else { $this->display(array('error' => array('id' => '0x03', 'msg' => 'Unknown API')),$this->config->output); }
            return false;
        }
    Je ne vois pas trop comment utiliser les namespace dans mon projet et surtout quelle norme adopter

    Merci d'avance pour votre aide.

    - Gecko
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($toBe || !$toBe) echo 'That is the question';

    Mes projets: DVP I/O

  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 te propose un peut de lecture pour le PSR-0

    https://github.com/php-fig/fig-stand...ed/fr/PSR-0.md

    De plus elle fournit un code qui permet d'auto chargé (à utiliser/adapter avec spl_autoload_register).


    Sinon un peu de lecture aussi (basé sur des composant de Symfony 2) :
    http://fabien.potencier.org/article/...ponents-part-1 (ou comment créer son prorpore framework avec des composant symfony 2, cette partie la parle juste d'implémenter un autoloader)
    Smiley de Plomb 2009
    Anciennement FrancoisIT

Discussions similaires

  1. Autoload PSR 0
    Par grunk dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2012, 16h56
  2. Réponses: 8
    Dernier message: 04/06/2004, 09h13
  3. Moteur physique : comment l'implémenter ?
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/12/2003, 12h56
  4. Réponses: 2
    Dernier message: 06/07/2002, 12h36
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

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