| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="learning.autoloading.resources">
- <title>Automatyczne ładowanie zasobów</title>
- <para>
- 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.
- </para>
- <para>
- Zgodnie z <link linkend="learning.autoloading.design">celami autoloadera</link> a zwłaszcza
- z ostatnim punktem, powyższa sytuacja jest obsługiwana przez autoloader Zend Framework
- poprzez <classname>Zend_Loader_Autoloader_Resource</classname>.
- </para>
- <para>
- 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:
- </para>
- <programlisting language="php"><![CDATA[
- $loader = new Zend_Application_Module_Autoloader(array(
- 'namespace' => 'Blog',
- 'basePath' => APPLICATION_PATH . '/modules/blog',
- ));
- ]]></programlisting>
- <para>
- 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.
- </para>
- <para>
- Jako przykład może posłużyć następujące drzewo katalogów:
- </para>
- <programlisting language="text"><![CDATA[
- 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
- ]]></programlisting>
- <para>
- Pierwszym krokiem jest utworzenie autoloadera zasobów:
- </para>
- <programlisting language="php"><![CDATA[
- $loader = new Zend_Loader_Autoloader_Resource(array(
- 'basePath' => 'sciezka/do/zasobow/',
- 'namespace' => 'Foo',
- ));
- ]]></programlisting>
- <para>
- Następnie należy zdefiniować typy zasobów.
- <methodname>Zend_Loader_Autoloader_Resourse::addResourceType()</methodname> 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 "<filename>models/DbTable</filename>" z prefiksem
- "<classname>Model_DbTable</classname>"). Następujący przykład pokazuje sposób ich
- definiowania:
- </para>
- <programlisting language="php"><![CDATA[
- $loader->addResourceType('form', 'forms', 'Form')
- ->addResourceType('model', 'models', 'Model')
- ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
- ]]></programlisting>
- <para>
- Po zdefiniowaniu, można używać tych klas bez ręcznego dołączania:
- </para>
- <programlisting language="php"><![CDATA[
- $form = new Foo_Form_Guestbook();
- $guestbook = new Foo_Model_Guestbook();
- ]]></programlisting>
- <note>
- <title>automatyczne ładowanie zasobu modułu</title>
- <para>
- Implementacja wzorca projektowego <acronym>MVC</acronym> 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
- <link linkend="project-structure.filesystem">zaleca standardową strukturę katalogów
- dla modułu</link>. Autoloader zasobów staje się bardzo przydatny w tym kontekście.
- Przez to, jeśli umieści się plik z klasą bootstrap pochodną do
- <classname>Zend_Application_Module_Bootstrap</classname> to autoloader zostanie
- domyślnie włączony. Aby uzyskać więcej informacji należy zapoznać się z
- <link linkend="zend.loader.autoloader-resource.module"> dokumentacją
- Zend_Loader_Autoloader_Module</link>.
- </para>
- </note>
- </sect1>
|