Zend_Loader_Autoloader_Resource umożliwia łatwą ingerencję w domyślną strukturę plików i katalogów ZF, a co za tym stoi - manipulowanie ich nazwami.
Przykładowo w Twoim projekcie przewidziałeś dwa (lub więcej) modułów, np. /application/modules/default/ oraz /application/modules/panel. Chciałbyś teraz uporządkować w ich ramach np. modele, viewhelper’y, formularze, aby zachować porządek nazewnictwa tych klas i logikę ich wywołania. Wygłądałoby to tak:
/application/modules/default/models /application/modules/default/forms /application/modules/default/views/helpers
oraz
/application/modules/panel/models /application/modules/panel/forms /application/modules/panel/views/helpers
Kolejne nazwy klas, w takim układzie nazywałyby się np.: Default_Model_Foo, Default_Form_Foo, Default_View_Helper_Foo, Panel_Model_Foo, Panel_Form_Foo, itd …
Oczywiście, przed każdą inicjalizacją obiektu, którejś z tych klas NIE postępujemy w ten sposób:
require_once '/application/modules/panel/forms/Foo.php'; $form = new Panel_Form_Foo();
ponieważ PHP5 (jak już kiedyś wspominałem) w wielu przypadkach sprawniej radzi sobie z
załadowaniem pliku przez __autoload niż używajać funkcji require_once.
Zatem dążymy do stworzenia instancji nowego obiektu, a jego załadowaniem niech zajmie się Zend Framework.
Możemy to zrobić na przykład dodając nowy zasób, który wskazywał by frameworkowi przestrzeń nazw, oraz lokalizację, w których te klasy się znajdują. Takie rozwiązanie, po pierwsze pozwoli nam wykorzystać świetny mechanizm Application Resource, a także zachować porządek w naszej aplikacji. Przykładowa klasa wyglądała by tak:
class Zextend_Application_Resource_Types extends Zend_Application_Resource_ResourceAbstract { public function init() { $resourceAutoloader = new Zend_Loader_Autoloader_Resource( array( 'basePath' => APPLICATION_PATH, 'namespace' => 'Default', 'resourceTypes' => array( 'form' => array( 'path' => 'modules/default/forms', 'namespace' => 'Form'), 'viewhelper' => array( 'path' => 'modules/default/views/helpers', 'namespace' => 'View_Helper') ) )); $resourceAutoloader = new Zend_Loader_Autoloader_Resource( array( 'basePath' => APPLICATION_PATH, 'namespace' => 'Panel', 'resourceTypes' => array( 'form' => array( 'path' => 'modules/panel/forms', 'namespace' => 'Form'), 'model' => array( 'path' => 'modules/panel/models', 'namespace' => 'Model', ), 'viewhelper' => array( 'path' => 'modules/panel/views/helpers', 'namespace' => 'View_Helper') ) )); } }
Pamiętajmy o odpowiednim wpisie do applikcation.ini:
resources.types = „array()”
Dzięki takiemu rozwiązaniu wprowadziliśmy do struktury aplikacji naszą logikę, którą bardzo łatwo możemy uruchomić lub przestać z niej korzystać.