Zend_Controller_Front implementează modelul »Front Controller. utilizate în aplicațiile MVC. Scopul său este de a inițializa mediul de interogare, de a ruta cererea de intrare și apoi de a lansa acțiunile detectate. Agregă toate răspunsurile și le returnează atunci când procesul este complet.
Zend_Controller_Front implementează de asemenea modelul "Singleton". aceasta înseamnă că, în orice moment, poate fi accesată doar o singură instanță din această clasă. Acest lucru îi permite să acționeze și ca registru în care sunt stocate alte obiecte care participă la procesul de expediere.
Zend_Controller_Front înregistrează în sine brokerul de pluginuri (plugin broker), care permite utilizarea plug-in-urilor pentru a urmări evenimentele inițiate de controlerul frontal. În cele mai multe cazuri, acest lucru face posibilă personalizarea procesului de expediere pentru un anumit site fără a extinde controlerul frontal pentru a adăuga funcționalități.
Un controler frontal necesită cel puțin una sau mai multe căi către directoare care conțin controale de acțiune pentru funcționarea acestuia. De asemenea, puteți utiliza diverse metode pentru a configura configurațiile controlerului frontal și ale asistenților săi.
Notă. Modul implicit
Implicit, controlerul frontal încarcă pluginul ErrorHandler și ajutorul pentru acțiunea ViewRenderer. Acest lucru se face pentru a simplifica tratarea erorilor și redarea vizualizărilor în controlori, respectiv.
Pentru a dezactiva ErrorHandler. faceți următoarele înainte de a apela metoda dispatch ().
// Dezactivați pluginul ErrorHandler:
$ front -> setParam # 40; 'NoErrorHandler'. adevărat # 41; ;
Pentru a dezactiva ViewRenderer. faceți următoarele înainte de a apela metoda dispatch ().
$ front -> addControllerDirectory # 40; “../modules/foo/controllers'. 'Foo' # 41; ;
Notă. Dacă utilizați addControllerDirectory () fără numele modulului, acesta va seta directorul pentru modulul implicit. Dacă directorul există deja, acesta va fi suprascris.
Puteți obține setările curente pentru directoarele controlerului folosind metoda getControllerDirectory (). Acesta va returna o serie de perechi modul => director.
Una dintre caracteristicile controlerului frontal este că puteți defini o structură modulară de directoare pentru crearea de componente individuale, numite "module".
Fiecare modul trebuie să locuiască în propriul director și să reflecte structura directorului modulului implicit - adică ar trebui să conțină, cel puțin, un subdirector de "controlori"; cu acesta, ca regulă, există un subdirector "vizualizări" și alte subdirectoare ale aplicației.
Metoda addModuleDirectory () vă permite să transmiteți un nume de director conținând unul sau mai multe directoare module. El le scanează și le adaugă ca directoare de controler la controlerul frontal.
Dacă doriți să obțineți calea la un anumit modul sau la modulul curent, puteți utiliza metoda getModuleDirectory (). când trece numele modulului, returnează calea către acesta, altfel calea către modulul curent este returnată.
expediere (Zend_Controller_Request_Abstract $ request = null, Zend_Controller_Response_Abstract $ response = null) este căruța de lucru a controlerului frontal. Acesta poate accepta opțional obiectul cererii și / sau obiectul de răspuns. Acest lucru permite dezvoltatorilor să-și transfere obiectele.
Dacă obiectul expediere () nu a primit un obiect de solicitare sau de răspuns, acesta va verifica dacă obiectele au fost înregistrate anterior și le vor folosi, sau instanțiate versiunile implicite (în ambele cazuri, versiunea HTTP va fi utilizată în mod implicit).
În mod similar, expedierea () verifică obiectele deja înregistrate ale routerului și dispecerului. iar dacă nu sunt găsite, instanțiate versiunile implicite.
Procesul de expediere are trei evenimente separate:
Rutarea este efectuată o singură dată, când este apelată expedierea (). valorile din obiectul de interogare sunt utilizate. Dispecerizarea se efectuează ciclic. O solicitare poate însemna apelarea mai multor acțiuni, controlerul sau plug-in-ul poate reinițializa obiectul cererii pentru apeluri suplimentare la alte acțiuni. Când toate acțiunile sunt finalizate, controlerul frontal returnează un răspuns.
Zend_Controller_Front :: run ($ path) este o metodă statică care ia doar calea spre directorul controlerului. Extrage instanța controlerului frontal prin intermediul getInstance ()), înregistrează această cale prin setControllerDirectory (). și la sfârșit îi sună metoda dispatch ().
În esență, executați () este o metodă la îndemână care poate fi utilizată atunci când dezvoltați un site care nu necesită o configurație specială a controlerului frontal.
// Instanțiați controlerul frontal, instalați directorul de controler și
// expedierea într-un singur apel:
Zend_Controller_Front. alerga # 40; “../application/controllers' # 41; ;
În plus față de metodele enumerate mai sus, există metode accesoriale pe care le puteți utiliza pentru a controla configurația controlerului frontal și, în același timp, configurarea claselor la care controlorul frontal delegă execuția.
resetInstance () poate fi utilizat pentru a reseta toate setările curente. Este destinat în principal testării, dar poate fi folosit și în cazul în care mai multe controale frontale trebuie să fie conectate între ele.
(set | get) DefaultControllerName () vă permite să setați un alt nume pentru controlerul implicit (altfel utilizat # 'index #') și obțineți valoarea curentă. Ei servesc ca intermediari pentru dispecer.
(set | get) DefaultAction () vă permite să setați un alt nume pentru acțiunea implicită (altfel utilizat # 'index #') și obțineți valoarea curentă. Ei servesc ca intermediari pentru dispecer.
(set | get) Cererea () vă permite să setați clasa de interogare sau obiectul acesteia pentru utilizare în procesul de expediere și să obțineți obiectul curent. Când instalați obiectul interogare, puteți trece numele clasei de interogare, caz în care metoda va încărca fișierul de clasă și va instanțiat-o.
(set | get) Router () vă permite să setați clasa ruterului sau obiectul său utilizat în timpul procesului de expediere și să obțineți obiectul curent. Când obiectul routerului este instalat, puteți trece numele clasei routerului, caz în care metoda va încărca fișierul de clasă și îl va instanțiat.
La recuperarea unui obiect de router, acesta verifică mai întâi pentru a vedea dacă obiectul este prezent în controlerul frontal și dacă nu există, instanțiază ruterul implicit (Rewrite Router).
(set | get) BaseUrl () oferă posibilitatea de a seta adresa URL de bază. care este eliminat de la început atunci când cererile de rutare și pentru a obține valoarea sa actuală. Această valoare este transmisă obiectului de solicitare imediat înainte de rutare.
(set | get) Dispecerul () oferă posibilitatea de a seta clasa dispecerului sau obiectul său pentru utilizare în timpul expedierii și obține obiectul curent. Când instalați obiectul dispecer, puteți trece numele de clasă al dispecerului, caz în care metoda încarcă fișierul de clasă și îl instantează.
La extragerea obiectului dispecer, metoda verifică mai întâi dacă obiectul este prezent în controlerul frontal și, dacă nu există, controlerul implicit este instanțiat.
(set | get) Răspunsul () vă permite să setați clasa de răspuns sau obiectul acesteia pentru utilizare în procesul de expediere și să preluați obiectul curent. Când setați obiectul de răspuns, puteți trece numele clasei de răspuns, caz în care metoda încarcă fișierul de clasă și îl instantează.
registerPlugin (Zend_Controller_Plugin_Abstract $ plugin, $ stackIndex = null) vă permite să înregistrați obiecte de plugin. Prin setarea parametrului $ stackIndex opțional. puteți controla ordinea în care sunt executate pluginurile.
unregisterPlugin ($ plugin) vă permite să vă anulați înregistrarea obiectelor de plugin. $ plugin poate fi fie un obiect plug-in, fie un șir indicând clasa plug-in pe care doriți să o desființați.
throwExceptions ($ flag) este folosit pentru a activa / dezactiva capacitatea de a genera excepții în timpul procesului de expediere. Implicit, excepțiile sunt prinse și plasate în obiectul de răspuns; includerea lui throwExceptions () va suprascrie acest comportament
returnResponse ($ flag) este folosit pentru a indica controlerului frontal dacă să returneze răspunsul de la expediere () (TRUE) sau răspunsul trebuie trimis automat (FALSE). În mod implicit, răspunsul este trimis automat (printr-un apel către Zend_Controller_Response_Abstract :: sendResponse ()); includerea returnResponse () va suprascrie acest comportament.
Situațiile în care poate fi necesar un răspuns includ examinarea excepțiilor înainte de a trimite un răspuns clientului, necesitatea de a înregistra diverse aspecte ale răspunsului (cum ar fi anteturile) etc.
În introducere, am subliniat faptul că controlerul din față acționează de asemenea ca un registru pentru diferitele componente ale controlerului. Acest lucru este implementat printr-un grup de metode pentru parametri. Aceste metode vă permit să înregistrați date arbitrare - obiecte și variabile - în controlerul frontal astfel încât acestea să poată fi extrase în orice punct din lanțul de expediere. Aceste valori sunt transmise radiatoarelor, dispecerului și controlorilor de acțiune. Aceste metode includ:
setParam ($ name, $ value) face posibilă setarea unui singur parametru cu numele $ name și valoarea $ value.
setParams (array $ params) vă permite să setați simultan mai mulți parametri utilizând o matrice asociativă.
getParam ($ name) face posibilă extragerea unui parametru la un moment dat, folosind denumirea lui $ ca un identificator.
getParams () vă permite să preluați toți parametrii la un moment dat.
clearParams () vă permite să ștergeți un parametru (prin trecerea unui identificator de șir), câțiva parametri (prin trecerea unui șir de identificatori de șir) sau întreaga stivă de parametru (fără a trece nimic).
Există mai mulți parametri predefiniți, în mod specific, utilizați în lanțul de expediere:
useDefaultControllerAlways este folosit pentru a indica dispecerului. aceasta ar trebui să utilizeze controlerul implicit în modul implicit pentru orice solicitare care nu este dispecerizabile (de exemplu, modulul, controlerul și / sau acțiune nu există). Implicit, este dezactivat.
Consultați Excepții în MVC, cu care puteți găsi mai multe informații despre utilizarea acestei setări.
disableOutputBuffering este folosit pentru a indica dispecerului. că nu trebuie să utilizați tampon de ieșire pentru a colecta datele de ieșire generate de controlorii de acțiune. În mod implicit, expeditorul colectează toate rezultatele și îl atașează corpului de conținut din obiectul răspuns.
noViewRenderer este folosit pentru a dezactiva utilitarul ViewRenderer. Setați acest parametru la true pentru a îl dezactiva.
noErrorHandler este folosit pentru a dezactiva pluginul Error Handler Setați acest parametru la true pentru al dezactiva.
Atunci când moșteni de la controlerul din față, trebuie cel puțin să ignori metoda getInstance ().