autoloading-resources.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.autoloading.resources">
  5. <title>Auto-chargement de resources</title>
  6. <para>
  7. En développant des applications, il est souvent difficile de regrouper certaines classes
  8. dans une relation 1:1 avec le système de fichiers que recommande le Zend framework, ou
  9. alors
  10. ça ne semble pas intuitif de le faire. Cela signifie que les classes ne seront pas
  11. trouvées
  12. par l'autoloader.
  13. </para>
  14. <para>
  15. Si vous lisez <link linkend="learning.autoloading.design">les caractéristiques de
  16. l'architecture
  17. </link>
  18. de l'autoloader, le dernier point de cette section indique qu'une solution existe pour
  19. un tel problème. Zend Framework utilise alors <classname>Zend_Loader_Autoloader_Resource
  20. </classname>
  21. .
  22. </para>
  23. <para>
  24. Une ressource est juste un nom qui correspond à un espace de noms pour un composant
  25. (qui est ajouté à l'espace de noms de l'autoloader) et un chemin (qui est relatif au
  26. chemin de base de l'autoloader). Sous forme de code, vous feriez quelque chose comme:
  27. </para>
  28. <programlisting language="php"><![CDATA[
  29. $loader = new Zend_Application_Module_Autoloader(array(
  30. 'namespace' => 'Blog',
  31. 'basePath' => APPLICATION_PATH . '/modules/blog',
  32. ));
  33. ]]></programlisting>
  34. <para>
  35. Une fois le chargeur en place, il faut l'informer des différents types de ressources
  36. qu'il va avoir à gérer. Ces types sont simplement des paires d'arbres et de préfixes.
  37. </para>
  38. <para>
  39. Considérons ce qui suit comme exemple:
  40. </para>
  41. <programlisting language="text"><![CDATA[
  42. path/to/some/resources/
  43. |-- forms/
  44. | `-- Guestbook.php // Foo_Form_Guestbook
  45. |-- models/
  46. | |-- DbTable/
  47. | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
  48. | |-- Guestbook.php // Foo_Model_Guestbook
  49. | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
  50. ]]></programlisting>
  51. <para>
  52. Le premier reflexe est de créer un chargeur de ressources:
  53. </para>
  54. <programlisting language="php"><![CDATA[
  55. $loader = new Zend_Loader_Autoloader_Resource(array(
  56. 'basePath' => 'path/to/some/resources/',
  57. 'namespace' => 'Foo',
  58. ));
  59. ]]></programlisting>
  60. <para>
  61. Puis, nous définissons des types de ressources.
  62. <methodname>Zend_Loader_Autoloader_Resourse::addResourceType()</methodname> prend trois
  63. arguments: le "type" de resource (une chaine arbitraire), le chemin sous le chemin de base
  64. dans lequel le type de ressource doit se trouver, et le préfixe particulier à utiliser
  65. pour
  66. ce type de ressource. Dans l'arbre représenté ci-dessus, il y a trois types : form
  67. (dans le sous-dossier "forms", avec un préfixe "Form"), model (dans le sous-dossier
  68. "models",
  69. avec un préfixe "Model"), et dbtable (dans le sous-dossier
  70. "<filename>models/DbTable</filename>", avec un préfixe "<classname>Model_DbTable</classname>").
  71. Nous les définirons comme ceci:
  72. </para>
  73. <programlisting language="php"><![CDATA[
  74. $loader->addResourceType('form', 'forms', 'Form')
  75. ->addResourceType('model', 'models', 'Model')
  76. ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
  77. ]]></programlisting>
  78. <para>
  79. Il ne reste plus qu'à utiliser les classes:
  80. </para>
  81. <programlisting language="php"><![CDATA[
  82. $form = new Foo_Form_Guestbook();
  83. $guestbook = new Foo_Model_Guestbook();
  84. ]]></programlisting>
  85. <note>
  86. <title>Autoload de ressource Module</title>
  87. <para>
  88. La couche <acronym>MVC</acronym> de Zend Framework encourage l'utilisation de
  89. "modules", qui sont des mini-applications de votre site. Les modules
  90. possèdent typiquement des
  91. types de ressource par défaut, et Zend Framework
  92. <link linkend="project-structure.filesystem">recommande une hiérarchie de répertoires
  93. standard pour les modules
  94. </link>
  95. .Les autoloaders de ressources sont particulièrement
  96. adaptés à cette situation -- tellement qu'ils sont activés par défaut lorsque vous
  97. créez
  98. des classes de bootstrap qui étendent
  99. <classname>Zend_Application_Module_Bootstrap</classname>. Pour plus d'informations,
  100. lisez
  101. la <link
  102. linkend="zend.loader.autoloader-resource.module">documentation
  103. de
  104. Zend_Loader_Autoloader_Module
  105. </link>
  106. .
  107. </para>
  108. </note>
  109. </sect1>