autoloading-resources.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.autoloading.resources">
  5. <title>Automatisches Laden von Ressourcen</title>
  6. <para>
  7. Oft ist es kompliziert, wenn eine Anwendung entwickelt wird, Klassen in den 1:1
  8. Klassenname:Dateiname Standard zu packen welchen der Zend Framework empfiehlt, oder es
  9. hat Vorteile für Zwecke des Packens das nicht zu tun. Das bedeutet aber das die eigenen
  10. Klassendateien nicht vom Autoloader gefunden werden.
  11. </para>
  12. <para>
  13. Wenn man <link linkend="learning.autoloading.design">die Design Ziele</link> für den
  14. Autoloader durchliest, zeigt der letzte Punkt in diesem Kapitel das die Lösung diese
  15. Situation abdecken könnte. Zend Framework macht das mit der
  16. <classname>Zend_Loader_Autoloader_Resource</classname>.
  17. </para>
  18. <para>
  19. Eine Ressource ist nur ein Name der mit dem Namespace einer Komponente korrespondiert
  20. (welche dem Namespace des Autoloaders angehängt wird) und einem Pfad (der relativ zum
  21. Basispfad des Autoloaders ist). In Aktion könnte man etwas wie folgt machen:
  22. </para>
  23. <programlisting language="php"><![CDATA[
  24. $loader = new Zend_Application_Module_Autoloader(array(
  25. 'namespace' => 'Blog',
  26. 'basePath' => APPLICATION_PATH . '/modules/blog',
  27. ));
  28. ]]></programlisting>
  29. <para>
  30. Sobald der Loader platziert ist, muss man Ihn über die verschiedenen Ressource Typen
  31. informieren die er beachten soll. Dieser Ressource Typen sind einfach Paare von
  32. Unterverzeichnis und Präfix.
  33. </para>
  34. <para>
  35. Nehmen wir als Beispiel den folgenden Baum:
  36. </para>
  37. <programlisting language="text"><![CDATA[
  38. path/to/some/resources/
  39. |-- forms/
  40. | `-- Guestbook.php // Foo_Form_Guestbook
  41. |-- models/
  42. | |-- DbTable/
  43. | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
  44. | |-- Guestbook.php // Foo_Model_Guestbook
  45. | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
  46. ]]></programlisting>
  47. <para>
  48. Unser erster Schritt ist die Erstellung des Ressource Loaders:
  49. </para>
  50. <programlisting language="php"><![CDATA[
  51. $loader = new Zend_Loader_Autoloader_Resource(array(
  52. 'basePath' => 'path/to/some/resources/',
  53. 'namespace' => 'Foo',
  54. ));
  55. ]]></programlisting>
  56. <para>
  57. Als nächstes müssen wir einige Ressource Typen definieren.
  58. <methodname>Zend_Loader_Autoloader_Resourse::addResourceType()</methodname> hat drei
  59. Argumente: den Typ ("type") der Ressource (ein eigener String), den Pfad unter dem Basispfad
  60. in dem der Ressource Typ gefunden werden kann, und der Präfix der Komponente welcher für den
  61. Ressource Typ zu verwenden ist. Im obigen Baum haben wir drei Ressource Typen: form
  62. (im Unterverzeichnis "forms", mit dem Komponenten Präfix "Form"), model (im Unterverzeichnis
  63. "models", mit dem Komponenten Präfix "Model"), und dbtable (im Unterverzeichnis
  64. "<filename>models/DbTable</filename>", mit dem Komponenten Präfix
  65. "<classname>Model_DbTable</classname>"). Wir definieren Sie wie folgt:
  66. </para>
  67. <programlisting language="php"><![CDATA[
  68. $loader->addResourceType('form', 'forms', 'Form')
  69. ->addResourceType('model', 'models', 'Model')
  70. ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
  71. ]]></programlisting>
  72. <para>
  73. Sobald Sie definiert sind, können diese Klassen einfach verwendet werden:
  74. </para>
  75. <programlisting language="php"><![CDATA[
  76. $form = new Foo_Form_Guestbook();
  77. $guestbook = new Foo_Model_Guestbook();
  78. ]]></programlisting>
  79. <note>
  80. <title>Modul Ressource Autoloading</title>
  81. <para>
  82. Zend Framework's <acronym>MVC</acronym> Layer empfiehlt die Verwendung von "Modulen",
  83. welche eigenständigt Anwendungen in der eigenen Site sind. Typischerweise haben Module
  84. standardmäßig eine Anzahl von Ressource Typen, und Zend Framework
  85. <link linkend="project-structure.filesystem">empfiehlt sogar ein Standard Verzeichnis
  86. Layout für Module</link>. Ressource Autoloader sind deshalb recht nützlich in diesem
  87. Paradigma -- so nützlich das Sie standardmäßig aktiviert sind wenn man eine Bootstrap
  88. Klasse für eigene Module erstellt welche
  89. <classname>Zend_Application_Module_Bootstrap</classname> erweitert. Für weitere
  90. Informationen kann in der <link
  91. linkend="zend.loader.autoloader-resource.module">Zend_Loader_Autoloader_Module
  92. Dokumentation</link> nachgelesen werden.
  93. </para>
  94. </note>
  95. </sect1>