| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.loader.autoloader-resource">
- <title>Autoloaders de ressources</title>
- <para>
- Les autoloaders de ressources servent à manipuler du code de librairies dans des espaces de noms,
- respectant les conventions de codage du Zend Framework, mais n'ayant pas une correspondance
- 1:1 entre le nom de la classe et la structure du dossier. Leur but est de faciliter le chargement
- du code des ressources de l'application, comme les modèles, les ACLs, les formulaires ...
- </para>
- <para>
- Les autoloaders de ressources s'enregistrent dans l'<link
- linkend="zend.loader.autoloader">autoloader</link> à leur instanciation, avec l'espace de noms
- auquels ils sont rattachés. Ceci permet de facilement isoler du code dans des dossiers, sous l'espace
- de noms, tout en gardant les bénéfices de l'autoload.
- </para>
- <sect2 id="zend.loader.autoloader-resource.usage">
- <title>Utilisation de l'autoloader de ressources</title>
- <para>
- Soit la structure de répertoires suivante:
- </para>
- <programlisting role="text"><![CDATA[
- path/to/some/directory/
- acls/
- Site.php
- forms/
- Login.php
- models/
- User.php
- ]]></programlisting>
- <para>
- Au sein de ce répertoire, toutes les classes sont préfixées par l'espace de noms
- "My_". Dans le dossier "acls", le préfixe de composant "Acl_" est ajouté, ce qui
- donne un nom de classe final "My_Acl_Site". Aussi, le dossier "forms"
- correspond à "Form_", ce qui donne "My_Form_Login". Le dossier "models" n'a pas
- d'espace de noms particulier, donnant donc "My_User".
- </para>
- <para>
- Pour instancier un autoloader de ressoucres, il faut au minimum lui passer son dossier
- de travail (base path), et le nom de l'espace de noms correspondant:
- </para>
- <programlisting role="php"><![CDATA[
- $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'path/to/some/directory',
- 'namespace' => 'My',
- ));
- ]]></programlisting>
- <note>
- <title>Espace de noms de base</title>
- <para>
- Dans <classname>Zend_Loader_Autoloader</classname>, vous devez spécifier le
- underscore final ("_") dans votre espace de noms.
- <classname>Zend_Loader_Autoloader_Resource</classname> suppose par contre
- que tout le code à auto-charger utilisera le séparateur d'espaces de noms
- underscore. Ainsi, vous n'avez pas besoin de le préciser avec l'autoloader
- de ressources.
- </para>
- </note>
- <para>
- Maintenant que notre autoloader est configuré, nous pouvons ajouter des composants
- à auto-charger. Ceci se fait via la méthode <code>addResourceType()</code>, qui accepte
- 3 arguments : un "type" de ressource, utiliser en interne comme nom de référence; le sous
- dossier dans lequel la ressource en question est logé, et l'espace de noms du composant
- à rajouter à l'espace de noms général. Voici un exemple:
- </para>
- <programlisting role="php"><![CDATA[
- $resourceLoader->addResourceType('acl', 'acls/', 'Acl')
- ->addResourceType('form', 'forms/', 'Form')
- ->addResourceType('model', 'models/');
- ]]></programlisting>
- <para>
- Aussi, vous auriez pu effectuer la même action avec un tableau PHP.
- <code>addResourceTypes()</code> est alors appropriée:
- </para>
- <programlisting role="php"><![CDATA[
- $resourceLoader->addResourceTypes(array(
- 'acl' => array(
- 'path' => 'acls/',
- 'namespace' => 'Acl',
- ),
- 'form' => array(
- 'path' => 'forms/',
- 'namespace' => 'Form',
- ),
- 'model' => array(
- 'path' => 'models/',
- ),
- ));
- ]]></programlisting>
- <para>
- Enfin, vous pouvez spécifier tout cela d'un seul coup avec des tableaux nichés.
- La clé doit alors être "resourceTypes":
- </para>
- <programlisting role="php"><![CDATA[
- $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'path/to/some/directory',
- 'namespace' => 'My',
- 'resourceTypes' => array(
- 'acl' => array(
- 'path' => 'acls/',
- 'namespace' => 'Acl',
- ),
- 'form' => array(
- 'path' => 'forms/',
- 'namespace' => 'Form',
- ),
- 'model' => array(
- 'path' => 'models/',
- ),
- ),
- ));
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.loader.autoloader-resource.module">
- <title>L'autoloader de ressource Module</title>
- <para>
- Zend Framework fournit une implémentation concrète de
- <classname>Zend_Loader_Autoloader_Resource</classname> qui contient des correspondances
- de ressources pour mettre en avant la structure modulaire par défaut que propose le
- Zend Framework dans ses applications MVC. Ce chargeur,
- <classname>Zend_Application_Module_Autoloader</classname>, propose le mapping suivant:
- </para>
- <programlisting role="text"><![CDATA[
- api/ => Api
- forms/ => Form
- models/ => Model
- DbTable/ => Model_DbTable
- plugins/ => Plugin
- ]]></programlisting>
- <para>
- Par exemple, avec un module dont le préfixe est "Blog_", le chargement de
- la classe "Blog_Form_Entry" mènerait au chargement du fichier "forms/Entry.php".
- </para>
- <para>
- En utilisant les bootstraps de modules avec <classname>Zend_Application</classname>, une
- instance de <classname>Zend_Application_Module_Autoloader</classname> sera crée pour chaque module
- utilisé.
- </para>
- </sect2>
- <sect2 id="zend.loader.autoloader-resource.factory">
- <title>Utiliser les autoloaders de ressources comme fabriques d'objets</title>
- <para></para>
- <!-- @todo -->
- </sect2>
- <sect2 id="zend.loader.autoloader-resource.reference">
- <title>Référence de l'autoloader de ressources</title>
- <para></para>
- <!-- @todo -->
- </sect2>
- <!-- @todo
- Write section on using load() functionality
- Potentially add functionality to load() to allow passing arguments
- Show how to use overloading to retrieve class instances
- Write reference section
- -->
- </sect1>
|