autoloading-resources.xml 4.4 KB

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