| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.autoloading.resources">
- <title>Automatisches Laden von Ressourcen</title>
- <para>
- Oft ist es kompliziert, wenn eine Anwendung entwickelt wird, Klassen in den 1:1
- Klassenname:Dateiname Standard zu packen welchen der Zend Framework empfiehlt, oder es
- hat Vorteile für Zwecke des Packens das nicht zu tun. Das bedeutet aber das die eigenen
- Klassendateien nicht vom Autoloader gefunden werden.
- </para>
- <para>
- Wenn man <link linkend="learning.autoloading.design">die Design Ziele</link> für den
- Autoloader durchliest, zeigt der letzte Punkt in diesem Kapitel das die Lösung diese
- Situation abdecken könnte. Zend Framework macht das mit der
- <classname>Zend_Loader_Autoloader_Resource</classname>.
- </para>
- <para>
- Eine Ressource ist nur ein Name der mit dem Namespace einer Komponente korrespondiert
- (welche dem Namespace des Autoloaders angehängt wird) und einem Pfad (der relativ zum
- Basispfad des Autoloaders ist). In Aktion könnte man etwas wie folgt machen:
- </para>
- <programlisting language="php"><![CDATA[
- $loader = new Zend_Application_Module_Autoloader(array(
- 'namespace' => 'Blog',
- 'basePath' => APPLICATION_PATH . '/modules/blog',
- ));
- ]]></programlisting>
- <para>
- Sobald der Loader platziert ist, muss man Ihn über die verschiedenen Ressource Typen
- informieren die er beachten soll. Dieser Ressource Typen sind einfach Paare von
- Unterverzeichnis und Präfix.
- </para>
- <para>
- Nehmen wir als Beispiel den folgenden Baum:
- </para>
- <programlisting language="text"><![CDATA[
- path/to/some/resources/
- |-- forms/
- | `-- Guestbook.php // Foo_Form_Guestbook
- |-- models/
- | |-- DbTable/
- | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
- | |-- Guestbook.php // Foo_Model_Guestbook
- | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
- ]]></programlisting>
- <para>
- Unser erster Schritt ist die Erstellung des Ressource Loaders:
- </para>
- <programlisting language="php"><![CDATA[
- $loader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'path/to/some/resources/',
- 'namespace' => 'Foo',
- ));
- ]]></programlisting>
- <para>
- Als nächstes müssen wir einige Ressource Typen definieren.
- <methodname>Zend_Loader_Autoloader_Resourse::addResourceType()</methodname> hat drei
- Argumente: den Typ ("type") der Ressource (ein eigener String), den Pfad unter dem Basispfad
- in dem der Ressource Typ gefunden werden kann, und der Präfix der Komponente welcher für den
- Ressource Typ zu verwenden ist. Im obigen Baum haben wir drei Ressource Typen: form
- (im Unterverzeichnis "forms", mit dem Komponenten Präfix "Form"), model (im Unterverzeichnis
- "models", mit dem Komponenten Präfix "Model"), und dbtable (im Unterverzeichnis
- "<filename>models/DbTable</filename>", mit dem Komponenten Präfix
- "<classname>Model_DbTable</classname>"). Wir definieren Sie wie folgt:
- </para>
- <programlisting language="php"><![CDATA[
- $loader->addResourceType('form', 'forms', 'Form')
- ->addResourceType('model', 'models', 'Model')
- ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
- ]]></programlisting>
- <para>
- Sobald Sie definiert sind, können diese Klassen einfach verwendet werden:
- </para>
- <programlisting language="php"><![CDATA[
- $form = new Foo_Form_Guestbook();
- $guestbook = new Foo_Model_Guestbook();
- ]]></programlisting>
- <note>
- <title>Modul Ressource Autoloading</title>
- <para>
- Zend Framework's <acronym>MVC</acronym> Layer empfiehlt die Verwendung von "Modulen",
- welche eigenständigt Anwendungen in der eigenen Site sind. Typischerweise haben Module
- standardmäßig eine Anzahl von Ressource Typen, und Zend Framework
- <link linkend="project-structure.filesystem">empfiehlt sogar ein Standard Verzeichnis
- Layout für Module</link>. Ressource Autoloader sind deshalb recht nützlich in diesem
- Paradigma -- so nützlich das Sie standardmäßig aktiviert sind wenn man eine Bootstrap
- Klasse für eigene Module erstellt welche
- <classname>Zend_Application_Module_Bootstrap</classname> erweitert. Für weitere
- Informationen kann in der <link
- linkend="zend.loader.autoloader-resource.module">Zend_Loader_Autoloader_Module
- Dokumentation</link> nachgelesen werden.
- </para>
- </note>
- </sect1>
|