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.