| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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
- <acronym>ACL</acronym>s, 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 auxquels 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 language="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" correspond à "Model_",
- donnant donc "My_Model_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 language="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 <methodname>addResourceType()</methodname>, 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 language="php"><![CDATA[
- $resourceLoader->addResourceType('acl', 'acls/', 'Acl')
- ->addResourceType('form', 'forms/', 'Form')
- ->addResourceType('model', 'models/', 'Model');
- ]]></programlisting>
- <para>
- Aussi, vous auriez pu effectuer la même action avec un tableau <acronym>PHP</acronym>.
- <methodname>addResourceTypes()</methodname> est alors appropriée :
- </para>
- <programlisting language="php"><![CDATA[
- $resourceLoader->addResourceTypes(array(
- 'acl' => array(
- 'path' => 'acls/',
- 'namespace' => 'Acl',
- ),
- 'form' => array(
- 'path' => 'forms/',
- 'namespace' => 'Form',
- ),
- 'model' => array(
- 'path' => 'models/',
- 'namespace' => 'Model',
- ),
- ));
- ]]></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 language="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/',
- 'namespace' => 'Model',
- ),
- ),
- ));
- ]]></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 <acronym>MVC</acronym>. Ce chargeur,
- <classname>Zend_Application_Module_Autoloader</classname>, propose le mapping
- suivant :
- </para>
- <programlisting language="text"><![CDATA[
- forms/ => Form
- models/ => Model
- DbTable/ => Model_DbTable
- mappers/ => Model_Mapper
- plugins/ => Plugin
- services/ => Service
- views/
- helpers => View_Helper
- filters => View_Filter
- ]]></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>
|