Automatisches Laden von Ressourcen
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.
Wenn man die Design Ziele 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
Zend_Loader_Autoloader_Resource.
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:
span style="color: #ff0000;">'namespace' => 'Blog',
'basePath''/modules/blog',
));
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.
Nehmen wir als Beispiel den folgenden Baum:
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
Unser erster Schritt ist die Erstellung des Ressource Loaders:
span style="color: #ff0000;">'basePath' => 'path/to/some/resources/',
'namespace' => 'Foo',
));
Als nächstes müssen wir einige Ressource Typen definieren.
Zend_Loader_Autoloader_Resourse::addResourceType() 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
"models/DbTable", mit dem Komponenten Präfix
"Model_DbTable"). Wir definieren Sie wie folgt:
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model')
->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
Sobald Sie definiert sind, können diese Klassen einfach verwendet werden:
Note: Modul Ressource Autoloading
Zend Framework's MVC 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
empfiehlt sogar ein Standard Verzeichnis
Layout für Module. 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
Zend_Application_Module_Bootstrap erweitert. Für weitere
Informationen kann in der Zend_Loader_Autoloader_Module
Dokumentation nachgelesen werden.