2
0

Zend_Loader-Autoloader-Resource.xml 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20250 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.loader.autoloader-resource">
  5. <title>Ressource Autoloader</title>
  6. <para>
  7. Ressource Autoloader sind dazu gedacht Namespaced Bibliothekscode zu Managen der den
  8. Coding Standard Richtlinien vom Zend Framework folgt, welche aber kein 1:1 Mapping
  9. zwischen dem Klassennamen und der Verzeichnis Struktur haben. Ihr primärer Zweck ist es
  10. als Autoloader Anwendungs-Ressource Code zu arbeiten, wie z.B. für
  11. Anwendungs-spezifische Modelle, Formen, und <acronym>ACL</acronym>s.
  12. </para>
  13. <para>
  14. Ressource Autoloader werden mit dem
  15. <link linkend="zend.loader.autoloader">autoloader</link> bei der Instanziierung registriert,
  16. und zwar mit dem Namespace mit dem Sie assoziiert sind. Das erlaubt es Code in speziellen
  17. Verzeichnissen zu namespacen, und trotzdem die Vorteile des Autoloadings zu nutzen.
  18. </para>
  19. <sect2 id="zend.loader.autoloader-resource.usage">
  20. <title>Verwendung von Ressource Autoloadern</title>
  21. <para>
  22. Nehmen wir die folgende Verzeichnis Struktur an:
  23. </para>
  24. <programlisting language="text"><![CDATA[
  25. path/to/some/directory/
  26. acls/
  27. Site.php
  28. forms/
  29. Login.php
  30. models/
  31. User.php
  32. ]]></programlisting>
  33. <para>
  34. In diesem Verzeichnis hat jeder Code ein Präfix mit dem Namespace "My_". Im
  35. Unterverzeichnis "acls" ist der Komponentenpräfix "Acl_" hinzugefügt, was letztendlich
  36. zu einem Klassennamen von "My_Acl_Site" führt. So ähnlich mappt das Unterverzeichnis
  37. "forms" auf "Form_", was zu "My_Form_Login" führt. Das Unterverzeichnis "models" hat
  38. keinen Komponenten Namespace, was zu "My_User" führt.
  39. </para>
  40. <para>
  41. Man kann einen Ressource Autoloader verwenden um diese Klassen automatisch zu laden.
  42. um den Ressource Autoloader zu instanziieren ist es mindestens notwendig den
  43. Basispfad und den Namespace für die Ressourcen zu übergeben für die er verantwortlich
  44. ist:
  45. </para>
  46. <programlisting language="php"><![CDATA[
  47. $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
  48. 'basePath' => 'path/to/some/directory',
  49. 'namespace' => 'My',
  50. ));
  51. ]]></programlisting>
  52. <note>
  53. <title>Basis Namespace</title>
  54. <para>
  55. In <classname>Zend_Loader_Autoloader</classname> wird erwartet das man den endenden
  56. Unterstrich ("_") im Namespace angibt wenn der eigene Autoloader verwendet wird
  57. um den Namespace zu suchen. <classname>Zend_Loader_Autoloader_Resource</classname>
  58. nimmt an das alle Codes die man automatisch laden will ein Unterstrich Trennzeichen
  59. zwischen Namespace, Komponente und Klasse verwenden. Als Ergebnis, muß man den
  60. endenen Unterstrich nicht verwenden wenn ein Ressource Autoloader registriert wird.
  61. </para>
  62. </note>
  63. <para>
  64. Jetzt da wir den Basis Ressource Autoloader eingerichtet haben, können wir einige
  65. Komponenten zu Ihm hinzufügen um die automatisch zu Laden. Das wird mit der
  66. <methodname>addResourceType()</methodname> Methode getan, welche drei Argumente
  67. akzeptiert: einen Ressource "type", der intern als Referenzname verwendet wird; den Pfad
  68. des Unterverzeichnisses unter dem Basispfad in dem diese Ressource existiert; und den
  69. Namespace der Komponente die dem Basis Namespace hinzugefügt wird. Als Beispiel fügen
  70. wir jeden unserer Ressource Typen hinzu.
  71. </para>
  72. <programlisting language="php"><![CDATA[
  73. $resourceLoader->addResourceType('acl', 'acls/', 'Acl')
  74. ->addResourceType('form', 'forms/', 'Form')
  75. ->addResourceType('model', 'models/');
  76. ]]></programlisting>
  77. <para>
  78. Alternativ können diese als Array an <methodname>addResourceTypes()</methodname>
  79. übergeben werden; das folgende ist äquivalent zu dem obigen:
  80. </para>
  81. <programlisting language="php"><![CDATA[
  82. $resourceLoader->addResourceTypes(array(
  83. 'acl' => array(
  84. 'path' => 'acls/',
  85. 'namespace' => 'Acl',
  86. ),
  87. 'form' => array(
  88. 'path' => 'forms/',
  89. 'namespace' => 'Form',
  90. ),
  91. 'model' => array(
  92. 'path' => 'models/',
  93. ),
  94. ));
  95. ]]></programlisting>
  96. <para>
  97. Letztendlich kann alles davon spezifiziert werden wenn das Objekt instanziiert wird
  98. indem einfach ein "resourceTypes" Schlüssel in den Optionen spezifiziert und übergeben
  99. wird, sowie eine Struktur wie anbei:
  100. </para>
  101. <programlisting language="php"><![CDATA[
  102. $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
  103. 'basePath' => 'path/to/some/directory',
  104. 'namespace' => 'My',
  105. 'resourceTypes' => array(
  106. 'acl' => array(
  107. 'path' => 'acls/',
  108. 'namespace' => 'Acl',
  109. ),
  110. 'form' => array(
  111. 'path' => 'forms/',
  112. 'namespace' => 'Form',
  113. ),
  114. 'model' => array(
  115. 'path' => 'models/',
  116. ),
  117. ),
  118. ));
  119. ]]></programlisting>
  120. </sect2>
  121. <sect2 id="zend.loader.autoloader-resource.module">
  122. <title>Der Modul Ressource Autoloader</title>
  123. <para>
  124. Zend Framework wird mit einer konkreten Implementation von
  125. <classname>Zend_Loader_Autoloader_Resource</classname> ausgeliefert die Ressourcen Typen
  126. enthält welche den notwendigen Standard Verzeichnisstrukturen für Zend Framework
  127. <acronym>MVC</acronym> Anwendungen entsprechen. Diese Lader,
  128. <classname>Zend_Application_Module_Autoloader</classname>, kommt mit den folgenden
  129. Mappings:
  130. </para>
  131. <programlisting language="text"><![CDATA[
  132. forms/ => Form
  133. models/ => Model
  134. DbTable/ => Model_DbTable
  135. mappers/ => Model_Mapper
  136. plugins/ => Plugin
  137. services/ => Service
  138. views/
  139. helpers => View_Helper
  140. filters => View_Filter
  141. ]]></programlisting>
  142. <para>
  143. Wenn man, als Beispiel, ein Modul mit dem Präfix "Blog_" hat, und die Klasse
  144. "Blog_Form_Entry" instanziieren will, würde diese in den Ressourcen Verzeichnis
  145. "forms/" im Unterverzeichnis nach einer Datei die "Entry.php" heißt suchen.
  146. </para>
  147. <para>
  148. Wenn Modul Bootstraps mit <classname>Zend_Application</classname> verwendet werden, wird
  149. standardmäßig eine Instanz von <classname>Zend_Application_Module_Autoloader</classname>
  150. für jede eigene Modul erstellt, was es erlaubt Modul Ressource automatisch zu laden.
  151. </para>
  152. </sect2>
  153. <sect2 id="zend.loader.autoloader-resource.factory">
  154. <title>Verwendung von Ressource Autoloadern als Objekt Factories</title>
  155. <para></para>
  156. <!-- @todo -->
  157. </sect2>
  158. <sect2 id="zend.loader.autoloader-resource.reference">
  159. <title>Referenz zu den Ressource Autoloadern</title>
  160. <para></para>
  161. <!-- @todo -->
  162. </sect2>
  163. <!-- @todo
  164. Write section on using load() functionality
  165. Potentially add functionality to load() to allow passing arguments
  166. Show how to use overloading to retrieve class instances
  167. Write reference section
  168. -->
  169. </sect1>