| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 20250 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.loader.autoloader-resource">
- <title>Ressource Autoloader</title>
- <para>
- Ressource Autoloader sind dazu gedacht Namespaced Bibliothekscode zu Managen der den
- Coding Standard Richtlinien vom Zend Framework folgt, welche aber kein 1:1 Mapping
- zwischen dem Klassennamen und der Verzeichnis Struktur haben. Ihr primärer Zweck ist es
- als Autoloader Anwendungs-Ressource Code zu arbeiten, wie z.B. für
- Anwendungs-spezifische Modelle, Formen, und <acronym>ACL</acronym>s.
- </para>
- <para>
- Ressource Autoloader werden mit dem
- <link linkend="zend.loader.autoloader">autoloader</link> bei der Instanziierung registriert,
- und zwar mit dem Namespace mit dem Sie assoziiert sind. Das erlaubt es Code in speziellen
- Verzeichnissen zu namespacen, und trotzdem die Vorteile des Autoloadings zu nutzen.
- </para>
- <sect2 id="zend.loader.autoloader-resource.usage">
- <title>Verwendung von Ressource Autoloadern</title>
- <para>
- Nehmen wir die folgende Verzeichnis Struktur an:
- </para>
- <programlisting language="text"><![CDATA[
- path/to/some/directory/
- acls/
- Site.php
- forms/
- Login.php
- models/
- User.php
- ]]></programlisting>
- <para>
- In diesem Verzeichnis hat jeder Code ein Präfix mit dem Namespace "My_". Im
- Unterverzeichnis "acls" ist der Komponentenpräfix "Acl_" hinzugefügt, was letztendlich
- zu einem Klassennamen von "My_Acl_Site" führt. So ähnlich mappt das Unterverzeichnis
- "forms" auf "Form_", was zu "My_Form_Login" führt. Das Unterverzeichnis "models" hat
- keinen Komponenten Namespace, was zu "My_User" führt.
- </para>
- <para>
- Man kann einen Ressource Autoloader verwenden um diese Klassen automatisch zu laden.
- um den Ressource Autoloader zu instanziieren ist es mindestens notwendig den
- Basispfad und den Namespace für die Ressourcen zu übergeben für die er verantwortlich
- ist:
- </para>
- <programlisting language="php"><![CDATA[
- $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'path/to/some/directory',
- 'namespace' => 'My',
- ));
- ]]></programlisting>
- <note>
- <title>Basis Namespace</title>
- <para>
- In <classname>Zend_Loader_Autoloader</classname> wird erwartet das man den endenden
- Unterstrich ("_") im Namespace angibt wenn der eigene Autoloader verwendet wird
- um den Namespace zu suchen. <classname>Zend_Loader_Autoloader_Resource</classname>
- nimmt an das alle Codes die man automatisch laden will ein Unterstrich Trennzeichen
- zwischen Namespace, Komponente und Klasse verwenden. Als Ergebnis, muß man den
- endenen Unterstrich nicht verwenden wenn ein Ressource Autoloader registriert wird.
- </para>
- </note>
- <para>
- Jetzt da wir den Basis Ressource Autoloader eingerichtet haben, können wir einige
- Komponenten zu Ihm hinzufügen um die automatisch zu Laden. Das wird mit der
- <methodname>addResourceType()</methodname> Methode getan, welche drei Argumente
- akzeptiert: einen Ressource "type", der intern als Referenzname verwendet wird; den Pfad
- des Unterverzeichnisses unter dem Basispfad in dem diese Ressource existiert; und den
- Namespace der Komponente die dem Basis Namespace hinzugefügt wird. Als Beispiel fügen
- wir jeden unserer Ressource Typen hinzu.
- </para>
- <programlisting language="php"><![CDATA[
- $resourceLoader->addResourceType('acl', 'acls/', 'Acl')
- ->addResourceType('form', 'forms/', 'Form')
- ->addResourceType('model', 'models/');
- ]]></programlisting>
- <para>
- Alternativ können diese als Array an <methodname>addResourceTypes()</methodname>
- übergeben werden; das folgende ist äquivalent zu dem obigen:
- </para>
- <programlisting language="php"><![CDATA[
- $resourceLoader->addResourceTypes(array(
- 'acl' => array(
- 'path' => 'acls/',
- 'namespace' => 'Acl',
- ),
- 'form' => array(
- 'path' => 'forms/',
- 'namespace' => 'Form',
- ),
- 'model' => array(
- 'path' => 'models/',
- ),
- ));
- ]]></programlisting>
- <para>
- Letztendlich kann alles davon spezifiziert werden wenn das Objekt instanziiert wird
- indem einfach ein "resourceTypes" Schlüssel in den Optionen spezifiziert und übergeben
- wird, sowie eine Struktur wie anbei:
- </para>
- <programlisting language="php"><![CDATA[
- $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'path/to/some/directory',
- 'namespace' => 'My',
- 'resourceTypes' => array(
- 'acl' => array(
- 'path' => 'acls/',
- 'namespace' => 'Acl',
- ),
- 'form' => array(
- 'path' => 'forms/',
- 'namespace' => 'Form',
- ),
- 'model' => array(
- 'path' => 'models/',
- ),
- ),
- ));
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.loader.autoloader-resource.module">
- <title>Der Modul Ressource Autoloader</title>
- <para>
- Zend Framework wird mit einer konkreten Implementation von
- <classname>Zend_Loader_Autoloader_Resource</classname> ausgeliefert die Ressourcen Typen
- enthält welche den notwendigen Standard Verzeichnisstrukturen für Zend Framework
- <acronym>MVC</acronym> Anwendungen entsprechen. Diese Lader,
- <classname>Zend_Application_Module_Autoloader</classname>, kommt mit den folgenden
- Mappings:
- </para>
- <programlisting language="text"><![CDATA[
- forms/ => Form
- models/ => Model
- DbTable/ => Model_DbTable
- mappers/ => Model_Mapper
- plugins/ => Plugin
- services/ => Service
- views/
- helpers => View_Helper
- filters => View_Filter
- ]]></programlisting>
- <para>
- Wenn man, als Beispiel, ein Modul mit dem Präfix "Blog_" hat, und die Klasse
- "Blog_Form_Entry" instanziieren will, würde diese in den Ressourcen Verzeichnis
- "forms/" im Unterverzeichnis nach einer Datei die "Entry.php" heißt suchen.
- </para>
- <para>
- Wenn Modul Bootstraps mit <classname>Zend_Application</classname> verwendet werden, wird
- standardmäßig eine Instanz von <classname>Zend_Application_Module_Autoloader</classname>
- für jede eigene Modul erstellt, was es erlaubt Modul Ressource automatisch zu laden.
- </para>
- </sect2>
- <sect2 id="zend.loader.autoloader-resource.factory">
- <title>Verwendung von Ressource Autoloadern als Objekt Factories</title>
- <para></para>
- <!-- @todo -->
- </sect2>
- <sect2 id="zend.loader.autoloader-resource.reference">
- <title>Referenz zu den Ressource Autoloadern</title>
- <para></para>
- <!-- @todo -->
- </sect2>
- <!-- @todo
- Write section on using load() functionality
- Potentially add functionality to load() to allow passing arguments
- Show how to use overloading to retrieve class instances
- Write reference section
- -->
- </sect1>
|