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:
$loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Blog', 'basePath' => APPLICATION_PATH . '/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:
$loader = new Zend_Loader_Autoloader_Resource(array( '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:
$form = new Foo_Form_Guestbook(); $guestbook = new Foo_Model_Guestbook();
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.