Teoria Funcționare zend_application - manual Zend Framework
Pregătirea configurat MVC -applications gata pentru procesarea cererii, necesită cod adițional al cărui volum depinde funcțional: stabilirea unei conexiuni la baza de date, tipuri de configurare și asistenții acestora, aspecte de configurare (machete), plug-in de înregistrare, asistenți de acțiune de înregistrare și așa mai departe .
În plus, poate doriți să reutilizați același cod pentru a descărca test, script-urile de serviciu, script-uri pentru a rula prin coroane. Puteți adăuga pur și simplu script-ul dvs. bootstrap, deseori există initializations care depind de mediu - de exemplu, pentru a rula prin intermediul coroanele MVC pot fi de prisos, și pentru serviciul de script-ul poate fi suficient doar strat de bază de date.
Zend_Application facilitează gestionarea încărcării inițiale și facilitează reutilizarea prin încapsularea de boot în conformitate cu paradigma OOP.
Zend_Application este format din trei zone:
Zend_Application. încarcă mediul PHP. inclusiv include_paths și punerea în funcțiune (autoloading), și instanțiază clasa bootstrap solicitate.
Zend_Application_Bootstrap. Acesta oferă interfețe pentru clasele bootstrap. Zend_Application_Bootstrap_Bootstrap oferă funcționalități comune care să răspundă nevoilor majorității încărcăturii inițiale, inclusiv algoritmi de dependență de verificare și posibilitatea de a descărca resurse la cerere.
Zend_Application_Resource oferă o interfață pentru resurse bootstrapping standard care pot fi încărcate la cerere, de către o instanță Bootstrap și implementări de resurse multiple utilizate în mod implicit.
Dezvoltatorii pot crea o clasă de bootstrap pentru aplicarea prin extinderea Zend_Application_Bootstrap_Bootstrap sau cel puțin realizarea interfeței Zend_Application_Bootstrap_Bootstrapper. Punctul de intrare (de exemplu, public / index.php) încărcări Zend_Application și instantia prin care trece:
Opțiuni pentru descărcare
Boot Opțiunile includ calea către fișierul care conține clasa bootstrap și opțional:
Orice modalități suplimentare pentru a adăuga la include_path
Orice namespace Autoloader suplimentare pe care doriți să vă înregistrați
Orice php.ini setare pentru a inițializa
Numele Clasa portbagajului (dacă utilizați un alt nume decât „Bootstrap“)
Cuplurile Prefixul de cale pentru resurse
Orice resurse pentru a utiliza (cu nume de clasă sau nume scurt)
O modalitate suplimentară de a încărca fișierul de configurare
Opțiuni de configurare suplimentare
Opțiunile pot fi o matrice, un obiect Zend_Config, sau calea către fișierul de configurare.
Al doilea domeniu de responsabilitate componentelor Zend_Application se execută bootstrap de aplicare. Umplerea minim trebuie să pună în aplicare interfață Zend_Application_Bootstrap_Bootstrapper. care definește următorul API.
funcția publică __construct # 40; aplicatie $ # 41; ;
setOptions funcția publică # 40; Opțiuni de matrice $ # 41; ;
funcția publică getApplication # 40; # 41; ;
funcția publică getEnvironment # 40; # 41; ;
getClassResources funcția publică # 40; # 41; ;
getClassResourceNames funcția publică # 40; # 41; ;
funcția publică bootstrap # 40; $ Resource = null # 41; ;
funcția publică run # 40; # 41; ;
Acest API permite bootstrap să accepte mediul și configurația obiectului cererii, identificarea resurselor de încărcare care este responsabil, să efectueze aplicații de încărcare și a alerga.
Sunteți liber să pună în aplicare această interfață, sau de a folosi pentru a extinde Zend_Application_Bootstrap_BootstrapAbstract Zend_Application_Bootstrap_Bootstrap.
În afară de funcționale și au alte domenii de interes, cu care ar trebui să devină familiar.
Zend_Application_Bootstrap_BootstrapAbstract oferă o simplă convenție pentru definirea metodelor de resurse de clasă. Orice metodă protejată cu un nume care începe cu _init. Acesta va fi considerată o metodă de resurse.
Pentru a rula o metodă unică de resurse, apel bootstrap () cu numele resursei ca argument. Numele de resurse este numele metodei fără _init prefix.
Pentru a rula mai multe metode de resurse, treci o serie de nume. Și pentru a rula toate metodele de resurse, apelați metoda fără argumente.
Luați următoarea clasă de bootstrap:
Clasa de Bootstrap extinde Zend_Application_Bootstrap_Bootstrap
Pentru a vă permite să facă șireturi dvs. mai reutilizabil, ne-am oferit posibilitatea de a împinge resursele în clase de resurse plugin. Acest lucru vă permite să combinați cu ușurință prin utilizarea resurselor de configurare. Mai jos este o descriere a modului de a crea resurse. În această secțiune vom arăta cum să le folosească.
Dacă descărcarea ar trebui să sprijine plugin-uri de resurse, va trebui să pună în aplicare o interfață Zend_Application_Bootstrap_ResourceBootstrapper suplimentară. Această interfață definește un API pentru localizarea, înregistrarea și plugin-uri de resurse de încărcare:
funcția publică registerPluginResource # 40; $ Resource. $ = null Opțiuni # 41; ;
funcția publică unregisterPluginResource # 40; resursă $ # 41; ;
funcția publică hasPluginResource # 40; resursă $ # 41; ;
funcția publică getPluginResource # 40; resursă $ # 41; ;
getPluginResources funcția publică # 40; # 41; ;
getPluginResourceNames funcția publică # 40; # 41; ;
funcția publică setPluginLoader # 40; Zend_Loader_PluginLoader_Interface $ încărcător # 41; ;
funcția publică getPluginLoader # 40; # 41; ;
Plugin-uri de resurse oferă practic posibilitatea de a crea initializatori de resurse care pot fi reutilizate în diferite aplicații. Acest lucru vă permite să păstrați boot curente și de a introduce noi resurse, fără a necesita modificări ale sarcinii actuale.
Zend_Application_Bootstrap_BootstrapAbstract (și, prin urmare, moștenește din clasa lui Zend_Application_Bootstrap_Bootstrap) să pună în aplicare această interfață, permițându-vă să utilizați plugin-uri de resurse.
Pentru a utiliza plugin-uri de resurse, trebuie să le specificați în opțiunile trecut la obiectele de aplicare și / sau o descărcare. Aceste opțiuni pot fi specificate printr-un fișier de configurare sau transferate manual. Opțiunile vor fi de perechi cheie / opțiuni, în cazul în care cheia este numele resursei. Numele resursei va face parte din șirul de caractere după prefixul de clasă. De exemplu, resursele furnizate c Zend Framework # „th, au prefixul de clasă«Zend_Application_Resource_», tot ceea ce urmează, este numele resursei. De exemplu:
$ = Aplicație nouă Zend_Application # 40; APPLICATION_ENV, matrice # 40;
'FrontController' => array # 40;
'ControllerDirectory' => APPLICATION_PATH. '/', controlere
Acest lucru înseamnă că ar trebui să fie utilizate „FrontController“ resursă cu opțiunile specificate.
Dacă aveți de gând să scrie propriile pluginuri de resurse, sau pentru a adăuga o terță parte, va trebui să-i spuneți dumneavoastră bootstrap unde să le caute. Pe plan intern, bootstrap utilizeaza Zend_Loader_PluginLoader. Prin urmare, este suficient pentru a specifica un prefix de clasă și calea către directorul cu resurse plugin-uri.
De exemplu, să presupunem că aveți pluginurile resurse în APPLICATION_PATH / resurse / director. și folosesc un prefix My_Resource comun. Puteți transmite aceste informații la obiectul de aplicare, după cum se arată mai jos:
$ = Aplicație nouă Zend_Application # 40; APPLICATION_ENV, matrice # 40;
'My_Resource' => APPLICATION_PATH. '/ Resurse /',
'FrontController' => array # 40;
'ControllerDirectory' => APPLICATION_PATH. '/', controlere
Apoi, puteți utiliza resurse din acel director.
La fel ca și în cazul resurselor metodele pe care le utilizați metoda bootstrap () pentru a executa plugin-uri de resurse. În mod similar, puteți specifica un singur plug-in resurse, mai multe plugin-uri (prin intermediul unei matrice), sau toate plugin-uri. În plus, aveți posibilitatea să le combinați cu metodele de resurse.
$ Bootstrap -> bootstrap # 40; 'FrontController' # 41; ;
$ Bootstrap -> bootstrap # 40; mulțime # 40; 'FrontController'. 'Foo' # 41; # 41; ;
// Executa toate metodele de resurse și plugin-uri:
$ Bootstrap -> bootstrap # 40; # 41; ;
Cele mai multe, dacă nu toate, metode și plugin-uri de resurse vor inițializa obiecte, și în multe cazuri, aceste obiecte vor fi necesare în altă parte în cerere. Cum pot obține acces la ele?
Zend_Application_Bootstrap_BootstrapAbstract oferă un registru local pentru aceste obiecte. Pentru a stoca obiectele în ea, doar le revine din resursele.
Pentru o mai mare flexibilitate, acest registru se face referire la un „container“; Singura cerință este ca acesta a fost supus. Resursele sunt înregistrate ca proprietăți denumite după numele resursei. Implicit de Zend_Registry instanță. dar puteți specifica în mod opțional orice alt obiect. Pentru container pot fi utilizate tehnici de manipulare setContainer () și getContainer (). Metoda getResource (resursă $) pot fi utilizate pentru a prelua resursa din container, și hasResource ($ resurse) - pentru a verifica dacă resursa a fost înregistrată.
De exemplu, ia în considerare o resursă vedere de bază:
Clasa de Bootstrap extinde Zend_Application_Bootstrap_Bootstrap
protejate _initView funcție # 40; # 41;
$ View = $ containere -> vedere;
Trebuie remarcat faptul că registrul și containerul nu este globală. Acest lucru înseamnă că trebuie să aibă acces la bootstrap, pentru a putea extrage resurse. Zend_Application_Bootstrap_Bootstrap oferă unele confort pentru acest lucru: în timp ce se înregistrează ca parametru la „bootstrap“ termen de punere în aplicare () în controlerul din față, vă permite să-l extrage din controlerele router, dispecer, plugin-uri, și acțiune.
De exemplu, dacă doriți ca în acțiunile controler pentru a avea acces la resursa vedere de sus, puteți face următoarele:
class FooController extinde Zend_Controller_Action
funcția publică de inițializare # 40; # 41;
$ = $ Bootstrap acest lucru -> getInvokeArg # 40; 'Bootstrap' # 41; ;
$ View = $ bootstrap -> getResource # 40; „Vizualizare“ # 41; ;
În plus față de executarea metodelor de resurse și plugin-uri, este de asemenea necesar să se asigure că acestea sunt executate o singură dată și doar o singură dată. Ele sunt destinate pentru a descărca aplicația și de executare de mai multe ori poate duce la o risipă de resurse.
În același timp, unele resurse pot depinde de alții, și necesită lor de pre-încărcare înainte de executarea lor. Pentru a rezolva aceste două probleme Zend_Application_Bootstrap_BootstrapAbstract oferă un mecanism simplu și eficient pentru urmărirea dependență.
Așa cum am menționat anterior, toate resursele - fie metode sau plugin-uri - sunt de procesul de bootstrap prin apelarea bootstrap (resursă $). în cazul în care resursa $ este numele resursei sau o serie de resurse. Dacă resursa $ este omis, aceasta înseamnă că toate resursele ar trebui să fie executați.
În cazul în care resursa depinde de alte resurse, ar trebui să apelați metoda bootstrap () în codul dvs. pentru a se asigura că aceste resurse. apelurile ulterioare la aceste resurse vor fi ignorate.
Metoda de resurse, un astfel de apel ar fi după cum urmează:
Clasa de Bootstrap extinde Zend_Application_Bootstrap_Bootstrap
protejate _initRequest funcție # 40; # 41;
// Asigurați-vă că regulatorul este inițializat
$ Acest -> bootstrap # 40; 'FrontController' # 41; ;
// Extras din față a registrului controlerul de încărcare
$ = $ Front acest -> getResource # 40; 'FrontController' # 41; ;
$ Cerere = new Zend_Controller_Request_Http # 40; # 41; ;
$ Cerere -> setBaseUrl # 40; '/ Foo' # 41; ;
$ Front -> setRequest # 40; cerere $ # 41; ;
// Asigurați-vă că cererea este stocată în registrul de încărcare
Așa cum sa spus mai devreme. o modalitate buna de a crea reutilizabil resurse bootstrap și codificare la clase discrete este de a utiliza plugin-uri de resurse. În timp ce Zend Framework vine cu un set de plugin-uri de resurse standard, ideea este că dezvoltatorii trebuie să scrie plugin-uri proprii pentru a îngloba propriul lor cod, pentru a inițializa.
Resursele trebuie să pună în aplicare numai Zend_Application_Resource_Resource sau, mai simplu, încă, să extindă Zend_Application_Resource_ResourceAbstract de clasă abstractă. Interfața de bază este destul de simplu:
funcția publică __construct # 40; $ = null Opțiuni # 41; ;
funcția publică setBootstrap # 40;
funcția publică getBootstrap # 40; # 41; ;
setOptions funcția publică # 40; Opțiuni de matrice $ # 41; ;
getOptions funcția publică # 40; # 41; ;
funcția publică de inițializare # 40; # 41; ;
Se definește pur și simplu că o resursă ar trebui să accepte opțiunile constructorului, au mecanisme pentru setarea / obtinerea de opțiuni, au mecanisme pentru setarea / preluarea obiectului bootstrap, și o metodă de inițializare.
class My_Resource_View extinde Zend_Application_Resource_ResourceAbstract