(No version information available, might only be in SVN)
Yaf_Loader introduit une solution d'autochargement compréhensive pour Yaf.
La première fois qu'une instance de la classe Yaf_Application est récupérée, Yaf_Loader instancie un squelette, et l'enregistre avec spl_autoload. Vous pouvez récupérer cette instance en utilisant la méthode Yaf_Loader::getInstance().
Yaf_Loader tente de charger une classe en une fois ;
si cette tentative échoue, et suivant la configuration de yaf.use_spl_auload (si défini à On),
Yaf_Loader::autoload() retournera FALSE
,
rendant ainsi la main aux autres fonctions d'auto-chargement. Si cette
option de configuration vaut Off (par défaut),
Yaf_Loader::autoload() retournera TRUE
,et, le plus important,
une alerte bien utile sera émise (très utile pour trouver la classe qui n'arrive
pas à se charger).
Note:
Veuillez conserver yaf.use_spl_autoload à Off à moins qu'il y a d'autres bibliothèques qui possèdent son propre système de chargement et puissent ré-écrire ce comportement.
Par défaut, Yaf_Loader se charge de toutes les bibliothèques (classe définie par des scripts) stockées dans le dossier global des bibliothèques, quui est défini dans le fichier php.ini(yaf.library).
Si vous voulez que la classe Yaf_Loader cherche des classes (ou des bibliothèques) dans le dossier des classes locales (qui est défini dans le fichier application.ini, et par défaut, vaut application.directory . "/libraray"), vous devez enregistrer le préfixe de la classe en utilisant la méthode Yaf_Loader::registerLocalNameSpace()
Voyons quelques exemples (en supposant que APPLICATION_PATH vaut application.directory):
Exemple #1 Exemple de configuration
// Supposons les options de configuration du php.ini suivantes : yaf.libraray = "/global_dir" // Supposons les options de configuration de application.ini suivantes : application.libraray = APPLICATION_PATH "/library"
Exemple #2 Enregistrement de localnamespace
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function _initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
Exemple #3 Load class example
class Foo_Bar_Test => // APPLICATION_PATH/library/Foo/Bar/Test.php class GLO_Name => // /global_dir/Glo/Name.php class BarNon_Test // /global_dir/Barnon/Test.php
Exemple #4 Exemple de chargement de classe via des espaces de noms
class \Foo\Bar\Dummy => // APPLICATION_PATH/library/Foo/Bar/Dummy.php class \FooBar\Bar\Dummy => // /global_dir/FooBar/Bar/Dummy.php
Vous pouvez noter que tous les noms de dossiers commençent par une lettre majuscule ; vous pouvez utiliser une lettre minuscule en définissant l'option de configuration yaf.lowcase_path = On dans le fichier php.ini.
Yaf_Loader est également prévu pour charger les classes MVC, et la règle est :
Exemple #5 Exemple de chargement de classe MVC
Controller Classes => // APPLICATION_PATH/controllers/ Model Classes => // APPLICATION_PATH/models/ Plugin Classes => // APPLICATION_PATH/plugins/
Exemple #6 Distinctions d'une classe MVC
Controller Classes => // ***Controller Model Classes => // ***Model Plugin Classes => // ***Plugin
Exemple #7 Exemple de chargement MVC
class IndexController // APPLICATION_PATH/controllers/Index.php class DataModel => // APPLICATION_PATH/models/Data.php class DummyPlugin => // APPLICATION_PATH/plugins/Dummy.php class A_B_TestModel => // APPLICATION_PATH/models/A/B/Test.php
aussi, le dossier sera affecté par yaf.lowcase_path.Note:
Depuis la version 2.1.18, Yaf supporte l'autochargement des constructeurs pour les scripts utilisateurs (ce qui signifie que l'autochargement est déclenché par un script PHP utilisateur, i.e. accès à une propriété statique du contrôleur dans le Bootstrap ou les plugins), mais l'autochargement tente uniquement de localiser le script contenant la classe du contrôleur dans le dossier par défaut du module, qui est "APPLICATION_PATH/controllers/".
Par défaut, cette valeur vaut application.directory . "/library" ; vous pouvez modifier ce comportement soit via l'option de configuration application.ini(application.library), soit en appelant la méthode Yaf_Loader::setLibraryPath().