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

Autres composants PHP Discussion :

Passage à l'autoloader


Sujet :

Autres composants PHP

  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut Passage à l'autoloader
    Je viens de passer mon applic en développement du ZF 1.7.8 au ZF 1.8.0.
    J'ai vraiment galéré avec le Zend_Loader::registerAutoload() qui est déprécié. Je suis donc passé à l'autoloader. Résultat : environ 1000 noms de classes à modifier dans l'ensemble du code (vive search/replace !).
    Mais bon, maintenant, j'ai un code plus propre avec une émulation des namespaces. Comme quoi, c'est une migration assez lourde mais c'est pour la bonne cause

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Citation Envoyé par vg33 Voir le message
    Je viens de passer mon applic en développement du ZF 1.7.8 au ZF 1.8.0.
    J'ai vraiment galéré avec le Zend_Loader::registerAutoload() qui est déprécié. Je suis donc passé à l'autoloader. Résultat : environ 1000 noms de classes à modifier dans l'ensemble du code (vive search/replace !).
    Mais bon, maintenant, j'ai un code plus propre avec une émulation des namespaces. Comme quoi, c'est une migration assez lourde mais c'est pour la bonne cause
    Tu aurais pu t'épargner bien des soucis : il existe une fonction pour "revenir" à l'utilisation d'avant la 1.8.0.

    La documentation :
    Finally, there may be times when you want the autoloader to load any namespace. For instance, PEAR libraries do not share a common namespace, making specifying individual namespaces difficult when many PEAR components are in use. You can use the setFallbackAutoloader() method to have the autoloader act as a catch-all:

    $autoloader->setFallbackAutoloader(true);
    Ainsi, tu gardes l'application telle quelle, et tu changeras lors d'une nouvelle version majeure de ton application

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par Janitrix Voir le message
    Tu aurais pu t'épargner bien des soucis : il existe une fonction pour "revenir" à l'utilisation d'avant la 1.8.0.
    Merci pour l'info
    Je croyais avoir lu toute la doc sur Zend_Loader, je ne l'avais pas vu celle-là
    Pour mon cas particulier, je suis justement en train de développer une nouvelle version majeure qui sortira en septembre. C'était donc vraiment intéressant de passer à l'autoloader dès maintenant, sinon je n'aurais pas pu passer au furur ZF 2.0. Et plus j'attendais, plus il y avait de modifs à faire !

  4. #4
    Membre confirmé
    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
    Par défaut
    Ca vaut le coup de mettre à jour le nom de ses classes ?
    Qu'es-ce qui change avec le Zend_Loader??

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Si tu ne le fais pas, tu ne pourras pas passer au ZF 2.0.
    De plus, cela fait une sorte d'émulation de namespace, ce qui te permet d'avoir des classes de même nom mais dans des modules différents.

  6. #6
    Membre confirmé
    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
    Par défaut
    Ok c'est sympa ça

    Question : où savoir comment utiliser le Zend_Loader correctement à partir de la 1.8 ?
    Ceux qui sont passés à la 1.8 on bien pioché les infos quelque part, où donc svp ?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Lis la doc sur Zend_Loader > Autoloader.
    A titre d'info, voici la modification que j'ai faite dans mon bootstrap :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Zend_Loader
    require_once "Zend/Loader/Autoloader.php";
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace('My_');
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => '../application',
        'namespace' => 'Applic',
    ));
    $resourceLoader->addResourceType('models', 'models/', 'Models');
    $resourceLoader->addResourceType('forms', 'forms/', 'Forms');
    Du coup, j'ai enlevé tous les répertoires de mes models dans l'include_path.
    Ensuite, j'ai du transformer tous les noms de mes models et de mes forms, et bien entendu tous mes noms de classes dans les scripts.
    J'ai l'arborescence suivante:

    application
    --models
    --forms
    ----default
    ----student
    ----teacher
    --modules
    ...

    Avec la config plus haut, les noms de fichiers n'ont pas changé. En revanche, la classe modèle Log() est devenue Applic_Models_Log().
    De même, mon form AddEditReport() du module teacher est devenu Applic_Forms_Teacher_AddEditReport().

  8. #8
    Membre confirmé
    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
    Par défaut
    Merci beaucoup pour ton exemple, il s'applique à merveille à mon site :p

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Pour ceux qui se posent encore la question, Julien nous a proposé une traduction de l'article publié par Matthew à l'occasion de cette nouvelle version 1.8 de ZF : http://julien-pauli.developpez.com/t...r/autoloaders/

    Il y explique le fonctionnement du nouveau composant Zend_Loader_Autoload qui rompt la compatibilité avec les anciennes applis autoloadées.


  10. #10
    Membre très actif
    Chef de projet en SSII
    Inscrit en
    Janvier 2008
    Messages
    149
    Détails du profil
    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Janvier 2008
    Messages : 149
    Par défaut
    Salut vg33, je voudrais savoir pourquoi tu ajoutes ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $resourceLoader->addResourceType('models', 'models/', 'Models');
    $resourceLoader->addResourceType('forms', 'forms/', 'Forms');
    Ils sont déjà définie de base dans la classe non ?

    J'ai lu l'article traduit par Julien, cependant je souhaiterais savoir comment ajouter plusieurs ressources avec le Zend_Application, j'ai en effet certaines ressources qui ne sont pas définie dans le initDefaultResourceTypes().

    J'ai vu ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $loader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Blog',
        'basePath'  => APPLICATION_PATH . '/modules/blog',
    ));
    Cependant peut on ajouter plusieurs ressources en même temps, si oui comment l'écrire?

    Aussi je souhaiterais redefinir les namespaces des ressources définies dans initDefaultResourceTypes() et les effacer, ainsi je n'aurais pas à renommer toutes mes classes, est ce une bonne idée ?

    Merci.

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Citation Envoyé par chenel80 Voir le message
    Salut vg33, je voudrais savoir pourquoi tu ajoutes ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $resourceLoader->addResourceType('models', 'models/', 'Models');
    $resourceLoader->addResourceType('forms', 'forms/', 'Forms');
    Ils sont déjà définie de base dans la classe non ?
    Comme dit la doc :
    Resource autoloaders are intended to manage namespaced library code that follow Zend Framework coding standard guidelines, but which do not have a 1:1 mapping between the class name and the directory structure. Their primary purpose is to facilitate autoloading application resource code, such as application-specific models, forms, and ACLs.
    Dans mon cas, pour raccourcir le nom de mes classes, je veux remplacer Application par Applic. Donc j'utilise les ressources.

  12. #12
    Membre très actif
    Chef de projet en SSII
    Inscrit en
    Janvier 2008
    Messages
    149
    Détails du profil
    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Janvier 2008
    Messages : 149
    Par défaut
    Je ne sais toujours pas comment ajouter une ressource dans mon bootstrap. J'ai tenté de le faire comme toi mais sans résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected function _initAutoload()
        {
            $autoloader = new Zend_Application_Module_Autoloader(
            array(
                'namespace' => '',
                'basePath'  => APPLICATION_PATH,
            )
            );
            // sans effet ..
            $autoloader->addResourceType('Forms', 'forms/', '');
     
            return $autoloader;
        }
    Je dois toujours préfixer mes formulaires avec Form_ pour que cela fonctionne.
    Comment faire si l'on ajoute des dossiers supplémentaires et qu'on veut que notre autoloader y accède, j'ai essayé de chercher dans la documentation, mais je n'ai toujours pas trouvé la réponse malheureusement.

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Je n'utilise pas Zend_Application.
    Ce que j'indique plus haut fonctionne avec un bootstrap simple dans le index.php.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39
  3. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15
  4. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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