Często, podczas tworzenia aplikacji, zachowanie zalecanego przez Zend Framework standardu dotyczącego utrzymania stosunku 1:1 pomiędzy klasami a plikami jest trudne bądź niekorzystne z punktu widzenia wydajności. To oznacza, że pliki z klasami nie zostaną odnalezione przez autoloader.
Zgodnie z celami autoloadera a zwłaszcza
z ostatnim punktem, powyższa sytuacja jest obsługiwana przez autoloader Zend Framework
poprzez Zend_Loader_Autoloader_Resource.
Zasób to jedynie nazwa odpowiadająca przestrzeni nazw komponentu (dołączona do przestrzeni nazw autoloadera) wraz ze ścieżką (relatywnie do ścieżki bazowej autoloadera). W praktyce można użyć następującego kodu:
$loader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Blog',
'basePath' => APPLICATION_PATH . '/modules/blog',
));
Po włączeniu autoloadera należy "poinformować" go o typach zasobów, które powinien dołączać. Są to, po prostu, pary względnych ścieżek oraz prefiksów.
Jako przykład może posłużyć następujące drzewo katalogów:
sciezka/do/zasobow/ |-- forms/ | `-- Guestbook.php // Foo_Form_Guestbook |-- models/ | |-- DbTable/ | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook | |-- Guestbook.php // Foo_Model_Guestbook | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
Pierwszym krokiem jest utworzenie autoloadera zasobów:
$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'sciezka/do/zasobow/',
'namespace' => 'Foo',
));
Następnie należy zdefiniować typy zasobów.
Zend_Loader_Autoloader_Resourse::addResourceType() przyjmuje trzy
argumenty: typ zasobu (dowolny łańcuch znaków), ścieżka relatywna do
ścieżki bazowej autoloadera, w której zasób się znajduje oraz prefiks używany przez dany typ
zasobu. W powyższym przykładzie istnieją trzy rodzaje zasobów: formularze (w katalogu
"forms" z prefiksem "Form"), modele (w katalogu "models" z prefiksem "Model") oraz modele
tabeli bazy danych (w katalogu "models/DbTable" z prefiksem
"Model_DbTable"). Następujący przykład pokazuje sposób ich
definiowania:
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model')
->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
Po zdefiniowaniu, można używać tych klas bez ręcznego dołączania:
$form = new Foo_Form_Guestbook(); $guestbook = new Foo_Model_Guestbook();
automatyczne ładowanie zasobu modułu
Implementacja wzorca projektowego MVC w Zend Framework zachęca do
używania modułów, które są mini-aplikacjami w ramach tworzonego programu. Moduły
przeważnie posiadają wiele typów zasobów a Zend Framework nawet
zaleca standardową strukturę katalogów
dla modułu. Autoloader zasobów staje się bardzo przydatny w tym kontekście.
Przez to, jeśli umieści się plik z klasą bootstrap pochodną do
Zend_Application_Module_Bootstrap to autoloader zostanie
domyślnie włączony. Aby uzyskać więcej informacji należy zapoznać się z
dokumentacją
Zend_Loader_Autoloader_Module.