1 <sect1 id="zend.controller.basics">
2 <title>Zend_Controller alapok</title>
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.
11 A következő ábra bemutatja a munkafolyamatot, az utána következőkben pedig részletesen leírjuk a kölcsönhatásokat:
16 fileref="figures/zend.controller.basics.png"
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.
32 <code>Zend_Controller_Front</code>
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.
42 <code>Zend_Controller_Request_Abstract</code>
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.
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.
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.
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>
74 művelet lesz használva, megadva a
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>.
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.
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.
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,
103 <code>bigyo</code>ként
107 <title>TeveBetűzöttElnevezésiMegállapodások</title>
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.
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).
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>
120 <code>/ize-bigyo/bigyo-bigyocska</code>
121 kell hivatkoznod rájuk az URL-ben.
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.
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.
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.
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.