Zend_Loader-Autoloader-Resource.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.loader.autoloader-resource">
  5. <title>Autoloaders de ressources</title>
  6. <para>
  7. Les autoloaders de ressources servent à manipuler du code de librairies dans des
  8. espaces de noms, respectant les conventions de codage du Zend Framework, mais n'ayant pas
  9. une correspondance 1:1 entre le nom de la classe et la structure du dossier. Leur but est de
  10. faciliter le chargement du code des ressources de l'application, comme les modèles, les
  11. <acronym>ACL</acronym>s, les formulaires...
  12. </para>
  13. <para>
  14. Les autoloaders de ressources s'enregistrent dans l'<link
  15. linkend="zend.loader.autoloader">autoloader</link> à leur instanciation, avec l'espace de
  16. noms auxquels ils sont rattachés. Ceci permet de facilement isoler du code dans des
  17. dossiers, sous l'espace de noms, tout en gardant les bénéfices de l'autoload.
  18. </para>
  19. <sect2 id="zend.loader.autoloader-resource.usage">
  20. <title>Utilisation de l'autoloader de ressources</title>
  21. <para>Soit la structure de répertoires suivante&#160;:</para>
  22. <programlisting language="text"><![CDATA[
  23. path/to/some/directory/
  24. acls/
  25. Site.php
  26. forms/
  27. Login.php
  28. models/
  29. User.php
  30. ]]></programlisting>
  31. <para>
  32. Au sein de ce répertoire, toutes les classes sont préfixées par l'espace de noms
  33. "My_". Dans le dossier "acls", le préfixe de composant "Acl_" est ajouté, ce qui donne
  34. un nom de classe final "My_Acl_Site". Aussi, le dossier "forms" correspond à "Form_", ce
  35. qui donne "My_Form_Login". Le dossier "models" correspond à "Model_",
  36. donnant donc "My_Model_User".
  37. </para>
  38. <para>
  39. Pour instancier un autoloader de ressoucres, il faut au minimum lui passer son
  40. dossier de travail (base path), et le nom de l'espace de noms correspondant&#160;:
  41. </para>
  42. <programlisting language="php"><![CDATA[
  43. $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
  44. 'basePath' => 'path/to/some/directory',
  45. 'namespace' => 'My',
  46. ));
  47. ]]></programlisting>
  48. <note>
  49. <title>Espace de noms de base</title>
  50. <para>
  51. Dans <classname>Zend_Loader_Autoloader</classname>, vous devez spécifier le
  52. underscore final ("_") dans votre espace de noms.
  53. <classname>Zend_Loader_Autoloader_Resource</classname> suppose par contre que tout
  54. le code à auto-charger utilisera le séparateur d'espaces de noms underscore. Ainsi,
  55. vous n'avez pas besoin de le préciser avec l'autoloader de ressources.
  56. </para>
  57. </note>
  58. <para>
  59. Maintenant que notre autoloader est configuré, nous pouvons ajouter des composants
  60. à auto-charger. Ceci se fait via la méthode <methodname>addResourceType()</methodname>, qui accepte
  61. 3 arguments : un "type" de ressource, utiliser en interne comme nom de référence&#160;;
  62. le sous dossier dans lequel la ressource en question est logé, et l'espace de noms du
  63. composant à rajouter à l'espace de noms général. Voici un exemple&#160;:
  64. </para>
  65. <programlisting language="php"><![CDATA[
  66. $resourceLoader->addResourceType('acl', 'acls/', 'Acl')
  67. ->addResourceType('form', 'forms/', 'Form')
  68. ->addResourceType('model', 'models/', 'Model');
  69. ]]></programlisting>
  70. <para>
  71. Aussi, vous auriez pu effectuer la même action avec un tableau <acronym>PHP</acronym>.
  72. <methodname>addResourceTypes()</methodname> est alors appropriée&#160;:
  73. </para>
  74. <programlisting language="php"><![CDATA[
  75. $resourceLoader->addResourceTypes(array(
  76. 'acl' => array(
  77. 'path' => 'acls/',
  78. 'namespace' => 'Acl',
  79. ),
  80. 'form' => array(
  81. 'path' => 'forms/',
  82. 'namespace' => 'Form',
  83. ),
  84. 'model' => array(
  85. 'path' => 'models/',
  86. 'namespace' => 'Model',
  87. ),
  88. ));
  89. ]]></programlisting>
  90. <para>
  91. Enfin, vous pouvez spécifier tout cela d'un seul coup avec des tableaux nichés. La
  92. clé doit alors être "resourceTypes"&#160;:
  93. </para>
  94. <programlisting language="php"><![CDATA[
  95. $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
  96. 'basePath' => 'path/to/some/directory',
  97. 'namespace' => 'My',
  98. 'resourceTypes' => array(
  99. 'acl' => array(
  100. 'path' => 'acls/',
  101. 'namespace' => 'Acl',
  102. ),
  103. 'form' => array(
  104. 'path' => 'forms/',
  105. 'namespace' => 'Form',
  106. ),
  107. 'model' => array(
  108. 'path' => 'models/',
  109. 'namespace' => 'Model',
  110. ),
  111. ),
  112. ));
  113. ]]></programlisting>
  114. </sect2>
  115. <sect2 id="zend.loader.autoloader-resource.module">
  116. <title>L'autoloader de ressource Module</title>
  117. <para>
  118. Zend Framework fournit une implémentation concrète de
  119. <classname>Zend_Loader_Autoloader_Resource</classname> qui contient des correspondances
  120. de ressources pour mettre en avant la structure modulaire par défaut que propose le Zend
  121. Framework dans ses applications <acronym>MVC</acronym>. Ce chargeur,
  122. <classname>Zend_Application_Module_Autoloader</classname>, propose le mapping
  123. suivant&#160;:
  124. </para>
  125. <programlisting language="text"><![CDATA[
  126. forms/ => Form
  127. models/ => Model
  128. DbTable/ => Model_DbTable
  129. mappers/ => Model_Mapper
  130. plugins/ => Plugin
  131. services/ => Service
  132. views/
  133. helpers => View_Helper
  134. filters => View_Filter
  135. ]]></programlisting>
  136. <para>
  137. Par exemple, avec un module dont le préfixe est "Blog_", le chargement de la
  138. classe "Blog_Form_Entry" mènerait au chargement du fichier "forms/Entry.php".
  139. </para>
  140. <para>
  141. En utilisant les bootstraps de modules avec
  142. <classname>Zend_Application</classname>, une instance de
  143. <classname>Zend_Application_Module_Autoloader</classname> sera crée pour chaque module
  144. utilisé.
  145. </para>
  146. </sect2>
  147. <sect2 id="zend.loader.autoloader-resource.factory">
  148. <title>Utiliser les autoloaders de ressources comme fabriques d'objets</title>
  149. <para></para>
  150. <!-- @todo -->
  151. </sect2>
  152. <sect2 id="zend.loader.autoloader-resource.reference">
  153. <title>Référence de l'autoloader de ressources</title>
  154. <para></para>
  155. <!-- @todo -->
  156. </sect2>
  157. <!-- @todo
  158. Write section on using load() functionality
  159. Potentially add functionality to load() to allow passing arguments
  160. Show how to use overloading to retrieve class instances
  161. Write reference section
  162. -->
  163. </sect1>