Zend_Controller-Basics.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <sect1 id="zend.controller.basics">
  2. <title>Zend_Controller alapok</title>
  3. <para>
  4. A
  5. <code>Zend_Controller</code>
  6. rendszert könnyűnek, modulárisnak és kiterjeszthetőnek tervezték. Minimalista kivitelezés, hogy rugalmasságot és szabadságot engedjen a felhasználóknak, miközben elegendő szerkezetet nyújt hozzá, hogy a
  7. <code>Zend_Controller</code>
  8. köré épült rendszerek néhány gyakori egyezményen és hasonló kódelrendezésen osztozzanak.
  9. </para>
  10. <para>
  11. A következő ábra bemutatja a munkafolyamatot, az utána következőkben pedig részletesen leírjuk a kölcsönhatásokat:
  12. </para>
  13. <para>
  14. <inlinegraphic
  15. align="center"
  16. fileref="figures/zend.controller.basics.png"
  17. format="PNG"
  18. scale="100"
  19. valign="middle"
  20. width="483"
  21. />
  22. </para>
  23. <para>
  24. A
  25. <code>Zend_Controller</code>
  26. munkafolyamatot több összetevő valósítja meg. Habár nem szükséges teljesen megérteni ezen összetevők működését ahhoz, hogy használjuk a rendszert, a folyamat gyakorlati ismerete hasznos lehet.
  27. </para>
  28. <itemizedlist>
  29. <listitem>
  30. <para>
  31. A
  32. <code>Zend_Controller_Front</code>
  33. hangszereli a
  34. <code>Zend_Controller</code>
  35. rendszer teljes munkafolyamatát. Az Elülső Vezérlő minta egy megvalósítása. A
  36. <code>Zend_Controller_Front</code> dolgozza fel a kiszolgáló által fogadott összes kérést, és teljes egészében felelős a kérések Műveletvezérlőkhöz (<code>Zend_Controller_Action</code>) való kiküldéséért.
  37. </para>
  38. </listitem>
  39. <listitem>
  40. <para>
  41. A
  42. <code>Zend_Controller_Request_Abstract</code>
  43. (gyakran csak mint a
  44. <code>Kérés Objektum</code>)
  45. képviseli a kérés környezetét és tagfüggvények segítségével lehetővé teszi a vezérlő és művelet nevek, illetve minden kérés-paraméter beállítását és kinyerését. Továbbá számon tartja, hogy a művelet, amit tartalmaz, el lett-e indítva a
  46. <code>Zend_Controller_Dispatcher</code>
  47. által vagy sem. Az elvont kérés objektum kiterjesztései felhasználhatók a teljes környezet megukba foglalására, lehetővé téve az útválasztóknak, hogy információt szedjenek ki belőle a vezérlő és művelet nevek beállítása céljából.
  48. </para>
  49. <para>
  50. Alapból a
  51. <code>Zend_Controller_Request_Http</code>
  52. van használva, mely a teljes HTTP kéréskörnyezethez hozzáférést biztosít.
  53. </para>
  54. </listitem>
  55. <listitem>
  56. <para>
  57. A
  58. <code>Zend_Controller_Router_Interface</code>-t
  59. útválasztók meghatározásához használjuk. Az útválasztás az a folyamat, melynek során a kéréskörnyezet alapján eldöntjük melyik vezérlőnek, és eme vezérlőnek mely műveletének kell a kérést fogadnia. Ez a vezérlő, művelet és esetleges más paraméterek aztán bekerülnek a kérés objektumba, hogy aztán feldolgozásra kerüljenek a
  60. <code>Zend_Controller_Dispatcher_Standard</code>
  61. által. Útválasztás csak pontosan egyszer zajlik: mikor a kérés megérkezik, az első művelet elindítása előtt.
  62. </para>
  63. <para>
  64. Az alapértelmezett útválasztó, a
  65. <code>Zend_Controller_Router_Route_Rewrite</code>
  66. vesz egy URI végpontot, ahogy az a
  67. <code>Zend_Controller_Request_Http</code>-ben
  68. van megadva, majd szétbontja azt egy vezérlőre, műveletre és paraméterekre az URL-ben szereplő elérési út alapján. Példának okáért a
  69. <code>http://localhost/ize/bigyo/kulcs/ertek</code>
  70. URL-t visszafejtve az
  71. <code>ize</code>
  72. vezérlő, a
  73. <code>bigyo</code>
  74. művelet lesz használva, megadva a
  75. <code>kulcs</code>
  76. paramétert
  77. <code>ertek</code>
  78. értékkel.
  79. </para>
  80. <para>
  81. <code>A Zend_Controller_Router_Rewrite</code>-ot
  82. egyéni elérési utaknak is meg lehet feleltetni; további inforációkért lásd
  83. <link linkend="zend.controller.router">az útválasztó dokumentációját</link>.
  84. </para>
  85. </listitem>
  86. <listitem>
  87. <para>
  88. A
  89. <code>Zend_Controller_Dispatcher_Interface</code>-t
  90. kézbesítők meghatározására használjuk. A kézbesítés a folyamat, amely során kinyerjük a vezérlőt és a műveletet a kérés objektumból és leképezzük egy vezérlő állományra/osztályra és művelet tagfüggvényre a vezérlő osztályban. Ha a vezérlő vagy a művelet nem létezik, meghatározza az alapértelmezett vezérlőt és műveletet, aminek kézbesíteni kell.
  91. </para>
  92. <para>
  93. Maga a kézbesítés folyamata a vezérlő példányosításából és az ebben az osztályban lévő művelet tagfüggvény meghívásából áll. Eltérően az útválasztástól, ami csak egyszer történik, a kézbesítés ciklikusan zajlik. Ha a kérés objektum kézbesített állapotát bármikor visszaállítjuk, a ciklus megismétlődik, meghívva azt a műveletet, ami a kérés objektumban épp be van állítva. Az első alkalommal, amikor a ciklus úgy végződik, hogy a kérés objektum kézbesített állapotba van állítva (logikai igaz), a folyamat megáll.
  94. </para>
  95. <para>
  96. Az alapértelmezett kézbesítő a
  97. <code>Zend_Controller_Dispatcher_Standard</code>.
  98. Ez a vezérlőket a Controller szóra végződő, TeveBetűzöttOsztályokként határozzza meg, a művelet tagfüggvényeket pedig az Action szóra végződő teveBetűzöttTagfüggvényekként:
  99. <code>IzeController::bigyoAction()</code>.
  100. Ebben az esetben a vezérlőre
  101. <code>ize</code>ként,
  102. a műveletre pedig
  103. <code>bigyo</code>ként
  104. hivatkozhatunk.
  105. </para>
  106. <note>
  107. <title>TeveBetűzöttElnevezésiMegállapodások</title>
  108. <para>
  109. Mivel az emberek közismerten következetlenek a betűzés megtartásában hivatkozások gépelésekor, a Zend Framework egységesen kisbetűsre alakítja az elérési utakat. Ez természetesen kihatással lesz arra, hogyan nevezed el a vezérlőid és műveleteid… vagy hogyan utalsz rájuk a hivatkozásokban.
  110. </para>
  111. <para>
  112. Ha szeretnéd, hogy a vezérlő osztályod vagy műveletneved több TeveBetűzöttSzóból álljon, ezeket a szavakat az URL-ben egy kötőjellel vagy egy ponttal kell elválasztanod (habár beállíthatod a használandó karaktert).
  113. </para>
  114. <para>
  115. A példa kedvéért, ha az
  116. <code>IzeBigyoController::bigyoBigyocskaAction()</code>
  117. műveletet akarod elérni, akkor mint
  118. <code>/ize-bigyo/bigyo-bigyocska</code>
  119. vagy
  120. <code>/ize-bigyo/bigyo-bigyocska</code>
  121. kell hivatkoznod rájuk az URL-ben.
  122. </para>
  123. </note>
  124. </listitem>
  125. <listitem>
  126. <para>
  127. A
  128. <code>Zend_Controller_Action</code>
  129. az alap műveletvezérlő összetevő. Minden vezérlő egy osztály, ami a
  130. <code>Zend_Controller_Action</code>
  131. osztálytól örököl, és egy vagy több művelet tagfüggvényt kell tartalmaznia.
  132. </para>
  133. </listitem>
  134. <listitem>
  135. <para>
  136. A
  137. <code>Zend_Controller_Response_Abstract</code>
  138. ír le egy a műveletvezérlőkből a válaszok összegyűjtésére és visszaküldésére használt alap válasz osztályt. Mind a fejléc, mind pedig a törzs tartalmat összegyűjti.
  139. </para>
  140. <para>
  141. Az alapértelmezett válasz osztály a
  142. <code>Zend_Controller_Response_Http</code>,
  143. amely a HTTP környezetben való használatra alkalmas.
  144. </para>
  145. </listitem>
  146. </itemizedlist>
  147. <para>
  148. A
  149. <code>Zend_Controller</code>
  150. munkafolyamata viszonylag egyszerű. A
  151. <code>Zend_Controller_Front</code>
  152. fogadja a kérést, majd meghívja a
  153. <code>Zend_Controller_Router_Rewrite</code>-ot,
  154. hogy megállapítsa, melyik vezérlőnek (és műveletnek abban a vezérlőben) kézbesítsen. A
  155. <code>Zend_Controller_Router_Rewrite</code>
  156. felbontja az URI-t, hogy beállítsa a vezérlő és művelet neveket a kérésben. Ezután a
  157. <code>Zend_Controller_Front</code>
  158. belép a kézbesítési ciklusba. Meghívja a
  159. <code>Zend_Controller_Dispatcher_Standard</code>-et,
  160. átadva a kérést, hogy kézbesítse a kérésben megadott (vagy az alapbeállítású) vezérlőnek és a műveletnek. Miután a vezérlő végzett, az irányítás visszakerül a
  161. <code>Zend_Controller_Front</code>-hoz.
  162. Ha a vezérlő a kérés kézbesített állapotának visszaállításával jelezte, hogy egy másik vezérlőnek kell kézbesíteni, a ciklus folytatódik és újabb kézbesítés következik. Egyébként a folyamat leáll.
  163. </para>
  164. </sect1>
  165. <!--
  166. vim:se ts=4 sw=4 et:
  167. -->