# 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 `ize`ként, a műveletre pedig `bigyo`ké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.