1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 19782 -->
4 <sect1 id="learning.autoloading.resources">
5 <title>Automatyczne ładowanie zasobów</title>
8 Często, podczas tworzenia aplikacji, zachowanie zalecanego przez Zend Framework standardu
9 dotyczącego utrzymania stosunku 1:1 pomiędzy klasami a plikami jest trudne bądź niekorzystne
10 z punktu widzenia wydajności. To oznacza, że pliki z klasami nie zostaną odnalezione przez
15 Zgodnie z <link linkend="learning.autoloading.design">celami autoloadera</link> a zwłaszcza
16 z ostatnim punktem, powyższa sytuacja jest obsługiwana przez autoloader Zend Framework
17 poprzez <classname>Zend_Loader_Autoloader_Resource</classname>.
21 Zasób to jedynie nazwa odpowiadająca przestrzeni nazw komponentu (dołączona do przestrzeni
22 nazw autoloadera) wraz ze ścieżką (relatywnie do ścieżki bazowej autoloadera). W praktyce
23 można użyć następującego kodu:
26 <programlisting language="php"><![CDATA[
27 $loader = new Zend_Application_Module_Autoloader(array(
28 'namespace' => 'Blog',
29 'basePath' => APPLICATION_PATH . '/modules/blog',
34 Po włączeniu autoloadera należy "poinformować" go o typach zasobów, które powinien dołączać.
35 Są to, po prostu, pary względnych ścieżek oraz prefiksów.
39 Jako przykład może posłużyć następujące drzewo katalogów:
42 <programlisting language="text"><![CDATA[
45 | `-- Guestbook.php // Foo_Form_Guestbook
48 | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
49 | |-- Guestbook.php // Foo_Model_Guestbook
50 | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
54 Pierwszym krokiem jest utworzenie autoloadera zasobów:
57 <programlisting language="php"><![CDATA[
58 $loader = new Zend_Loader_Autoloader_Resource(array(
59 'basePath' => 'sciezka/do/zasobow/',
65 Następnie należy zdefiniować typy zasobów.
66 <methodname>Zend_Loader_Autoloader_Resourse::addResourceType()</methodname> przyjmuje trzy
67 argumenty: typ zasobu (dowolny łańcuch znaków), ścieżka relatywna do
68 ścieżki bazowej autoloadera, w której zasób się znajduje oraz prefiks używany przez dany typ
69 zasobu. W powyższym przykładzie istnieją trzy rodzaje zasobów: formularze (w katalogu
70 "forms" z prefiksem "Form"), modele (w katalogu "models" z prefiksem "Model") oraz modele
71 tabeli bazy danych (w katalogu "<filename>models/DbTable</filename>" z prefiksem
72 "<classname>Model_DbTable</classname>"). Następujący przykład pokazuje sposób ich
76 <programlisting language="php"><![CDATA[
77 $loader->addResourceType('form', 'forms', 'Form')
78 ->addResourceType('model', 'models', 'Model')
79 ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
83 Po zdefiniowaniu, można używać tych klas bez ręcznego dołączania:
86 <programlisting language="php"><![CDATA[
87 $form = new Foo_Form_Guestbook();
88 $guestbook = new Foo_Model_Guestbook();
92 <title>automatyczne ładowanie zasobu modułu</title>
95 Implementacja wzorca projektowego <acronym>MVC</acronym> w Zend Framework zachęca do
96 używania modułów, które są mini-aplikacjami w ramach tworzonego programu. Moduły
97 przeważnie posiadają wiele typów zasobów a Zend Framework nawet
98 <link linkend="project-structure.filesystem">zaleca standardową strukturę katalogów
99 dla modułu</link>. Autoloader zasobów staje się bardzo przydatny w tym kontekście.
100 Przez to, jeśli umieści się plik z klasą bootstrap pochodną do
101 <classname>Zend_Application_Module_Bootstrap</classname> to autoloader zostanie
102 domyślnie włączony. Aby uzyskać więcej informacji należy zapoznać się z
103 <link linkend="zend.loader.autoloader-resource.module"> dokumentacją
104 Zend_Loader_Autoloader_Module</link>.