Zend_Controller alapok
A
Zend_Controller
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
Zend_Controller
köré épült rendszerek néhány gyakori egyezményen és hasonló kódelrendezésen osztozzanak.
A következő ábra bemutatja a munkafolyamatot, az utána következőkben pedig részletesen leírjuk a kölcsönhatásokat:
A
Zend_Controller
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.
A
Zend_Controller_Front
hangszereli a
Zend_Controller
rendszer teljes munkafolyamatát. Az Elülső Vezérlő minta egy megvalósítása. A
Zend_Controller_Front 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 (Zend_Controller_Action) való kiküldéséért.
A
Zend_Controller_Request_Abstract
(gyakran csak mint a
Kérés Objektum)
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
Zend_Controller_Dispatcher
á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.
Alapból a
Zend_Controller_Request_Http
van használva, mely a teljes HTTP kéréskörnyezethez hozzáférést biztosít.
A
Zend_Controller_Router_Interface-t
ú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
Zend_Controller_Dispatcher_Standard
által. Útválasztás csak pontosan egyszer zajlik: mikor a kérés megérkezik, az első művelet elindítása előtt.
Az alapértelmezett útválasztó, a
Zend_Controller_Router_Route_Rewrite
vesz egy URI végpontot, ahogy az a
Zend_Controller_Request_Http-ben
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
http://localhost/ize/bigyo/kulcs/ertek
URL-t visszafejtve az
ize
vezérlő, a
bigyo
művelet lesz használva, megadva a
kulcs
paramétert
ertek
értékkel.
A Zend_Controller_Router_Rewrite-ot
egyéni elérési utaknak is meg lehet feleltetni; további inforációkért lásd
az útválasztó dokumentációját.
A
Zend_Controller_Dispatcher_Interface-t
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.
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.
Az alapértelmezett kézbesítő a
Zend_Controller_Dispatcher_Standard.
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:
IzeController::bigyoAction().
Ebben az esetben a vezérlőre
izeként,
a műveletre pedig
bigyoként
hivatkozhatunk.
TeveBetűzöttElnevezésiMegállapodások
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.
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).
A példa kedvéért, ha az
IzeBigyoController::bigyoBigyocskaAction()
műveletet akarod elérni, akkor mint
/ize-bigyo/bigyo-bigyocska
vagy
/ize-bigyo/bigyo-bigyocska
kell hivatkoznod rájuk az URL-ben.
A
Zend_Controller_Action
az alap műveletvezérlő összetevő. Minden vezérlő egy osztály, ami a
Zend_Controller_Action
osztálytól örököl, és egy vagy több művelet tagfüggvényt kell tartalmaznia.
A
Zend_Controller_Response_Abstract
í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.
Az alapértelmezett válasz osztály a
Zend_Controller_Response_Http,
amely a HTTP környezetben való használatra alkalmas.
A
Zend_Controller
munkafolyamata viszonylag egyszerű. A
Zend_Controller_Front
fogadja a kérést, majd meghívja a
Zend_Controller_Router_Rewrite-ot,
hogy megállapítsa, melyik vezérlőnek (és műveletnek abban a vezérlőben) kézbesítsen. A
Zend_Controller_Router_Rewrite
felbontja az URI-t, hogy beállítsa a vezérlő és művelet neveket a kérésben. Ezután a
Zend_Controller_Front
belép a kézbesítési ciklusba. Meghívja a
Zend_Controller_Dispatcher_Standard-et,
á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
Zend_Controller_Front-hoz.
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.