Cum functioneaza sistemul de cârlig al CodeIgniter

Ca dezvoltator CodeIgniter, uneori ajungeți într-o situație care vă cere să modificați nucleul cadrului sau fluxul de execuție pentru a vă îndeplini cerințele personalizate. Desigur, nu este recomandat să modificați fișierele de bază, deoarece face procesul de actualizare greoi. Din fericire, cadrul CodeIgniter vine cu sistemul de cârlige, care vă permite să vă ocupați de acest scenariu.

În acest articol, vom începe cu o introducere a sistemului de cârlige în cadrul CodeIgniter. Apoi, vom discuta diferitele tipuri de cârlige disponibile. În sfârșit, vom profita de această ocazie pentru a explora crearea de cârlige personalizate.

Cârlige: Un sistem de suprascriere a cadrului de bază

Să aruncăm o privire rapidă la ceea ce spune documentația oficială CodeIgniter despre sistemul de cârlige:

Funcția CodeIgniter Hooks oferă un mijloc de a accesa și a modifica funcționarea interioară a cadrului fără a hacka fișierele de bază.

Suna destul de explicativ, nu-i așa? În dezvoltarea aplicațiilor de zi cu zi, dacă vreți să fiți tentați să modificați fișierele core CodeIgniter, ar trebui să luați în considerare sistemul de cârlige pentru a vedea dacă acesta îndeplinește cerințele dvs..

Să presupunem că doriți să construiți un sistem personalizat de performanță pentru a monitoriza execuția aplicației. Vă dați seama că fișierele de bază trebuie să fie modificate pentru a obține rezultatul dorit. În acest caz, puteți utiliza pre_system si post_system cârlige pentru a intra în fluxul de execuție și pentru a colecta statisticile după cum este necesar.

Dacă cunoașteți modelul de observator al evenimentului, conceptul este similar în sensul că ascultați evenimentele generate de sistem și codul de observator corespunzător este executat atunci când evenimentul observat este declanșat.

Așa că a fost o introducere de bază a sistemului de cârlige din CodeIgniter. În secțiunea următoare, vom examina cu atenție diferitele cârlige disponibile pentru a vă conecta la sistem.

Du-te prin diferite cârlige

Sistemul de cârlig CodeIgniter oferă diferite puncte de cârlig pe care le puteți utiliza în timp ce implementați cârligele personalizate. Punctul de cârlig este, în esență, o anumită stare în fluxul de lucru al executării cererii la un moment dat.

De exemplu, atunci când implementați pre_system cârlig, știi că ești la începutul fazei de bootstrapping. Pe de altă parte, dacă l-ați ales post_system cârlig, puteți fi siguri că execuția este finalizată, iar răspunsul este deja trimis clientului.

În această secțiune, vom trece prin diferite puncte de cârlig care sunt furnizate de sistemul de cârlig CodeIgniter.

Cârlige de sistem

pre_system si post_system cârligele se încadrează în această categorie, deoarece prima se numește foarte devreme în timpul fazei de bootstrapping, în timp ce cea de-a doua este apelată după terminarea executării paginii.

Mă pot gândi la câteva cazuri de utilizare care ar putea fi realizate cu cârlige de sistem:

  • Benchmark
  • Logging
  • Rulează redirecționarea
  • Și altele

Cârlige de comandă

Există trei cârlige care se încadrează în această categorie, așa că hai să trecem prin fiecare dintre ele.

Cârlig de comandă pre

pre_controller cârligul este chemat chiar înainte ca clasa controlerului să fie instanțiată. Deci, dacă doriți să faceți mai multe verificări înainte ca controlorul să fie chemat, acesta este cârligul pe care îl căutați.

Post cârlig constructor de controlere

După cum sugerează și numele, post_controller_constructor cârligul este apelat imediat după ce obiectul controlerului este instanțiat și înainte de apelul metodic real.

În acest moment, sunteți sigur că controlerul este instanțiat și că metoda va fi apelată în curând, astfel încât să puteți încărca orice bibliotecă specifică controlorului aici sau puteți implementa validarea personalizată specifică controlerului.

Post Cârlig de control

post_controller cârligul se numește după executarea metodei controlerului. Deci lucrurile pe care doriți să le executați după executarea controlerului ar trebui implementate cu acest cârlig.

Așa a fost povestea cârligelor specifice controlorului.

Depășește cârligele

Afișează cârligul de suprascriere

Conform documentației CodeIgniter, display_override cârligul suprascrie nucleul _afişa metodă. Miezul _afişa metoda este folosită pentru a trimite ieșirea către client și, prin urmare, folosind display_override cârlig, ați putea modifica modul în care este trimisă de ieșire utilizatorului.

De fapt, vom explora acest cârlig în detaliu pe măsură ce vom trece la secțiunea următoare, în care vom discuta cum să creați un cârlig personalizat.

Cache Override Cache

cache_override cârligul suprascrie nucleul _display_cache metodă a producție clasă. _display_cache metoda este responsabilă pentru servirea ieșirii memorate în cache, astfel încât să puteți utiliza acest cârlig dacă doriți să difuzați pagina de ieșire din locația cache în cazul în care ați implementat un alt mecanism de cache.

Aceasta termină povestea diferitelor puncte de cârlig în sistemul de cârlig CodeIgniter. În următoarea secțiune, vom vedea exact cum ați putea profita de sistemul de cârlig prin implementarea unui exemplu din lumea reală.

Cum se creează un cârlig personalizat

Sunt sigur că ați avut destulă teorie până acum, așa că să revenim la o dezvoltare practică! În această secțiune, vom crea un cârlig personalizat pentru a demonstra conceptele discutate până acum în acest articol.

În cazul nostru, vom folosi display_override cârlig care va fi responsabil pentru înlocuirea tokenului. Pentru a fi mai precis, vom înlocui toate aparițiile lui [DATETIME] cu data curentă. Desigur, sună ca un caz de utilizare destul de simplu, dar puteți extinde cu ușurință să fie mai specific ca pe cerințele dumneavoastră.

Implicit, sistemul de cârlig este dezactivat în cadrul central, deci primul lucru pe care trebuie să-l faceți este să activați sistemul de cârlig.

Mergeți mai departe și deschideți fișierul de configurare application / config / config.php.

Căutați următorul fragment și porniți-l schimbând FALS la ADEVĂRAT.

Acum, suntem gata să definim cârligele noastre. De fapt, CodeIgniter vine deja cu dosarul application / config / hooks.php pe care le puteți folosi dacă doriți să definiți cârligele.

În mod implicit, funcția hooks.php fișierul este gol, așa că să adăugăm codul nostru de cârlig personalizat pentru a-l face mai semnificativ.

 'ReplaceToken', 'function' => 'replacePlaceholderCode', 'filename' => 'ReplaceToken.php', 'filepath' => 'cârlige');

Sintaxa de definire a unui cârlig personalizat este destul de simplă. Este vorba de $ cârlig array care deține toate cârligele care trebuie executate.

Cheia fiecărei intrări în matrice este numele cârligului pe care îl definiți. Când definiți un cârlig, îi spuneți sistemului să execute o anumită bucată de cod atunci când se întâmplă ceva. Este exact ceea ce trebuie să fie furnizat ca valoare a oricărui cârlig. Să trecem rapid prin fiecare cheie.

  • clasă cheia deține numele unei clase care deține codul care trebuie executat.
  • funcţie cheia conține numele metodei care va fi apelată la execuția cârligului.
  • nume de fișier puncte cheie la fișierul care definește codul complet de cârlig.
  • filepath definește calea directoare a fișierului declarat sub nume de fișier cheie, și este relativ la cerere director. În general, este setat la cârlige, rezultând astfel o aplicație / cârlige structura. Desigur, nu vă oprește să definiți o cale complet diferită dacă doriți să faceți acest lucru.

Ca o notă laterală, dacă nu doriți să creați un fișier de clasă, puteți furniza și o funcție de închidere care va fi executată când cârligul este declanșat.

În cazul nostru, vom crea un fișier ReplaceToken.php și în funcție de definiția cârligului trebuie să fie plasată sub aplicație / cârlige director.

Continuați și creați un fișier application / cârlige / ReplaceToken.php cu următorul conținut.

CI = & get_instance (); // obține ieșirea reală $ contents = $ this-> CI-> output-> get_output (); // înlocuiți jetoanele $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[DATETIME]", standard_date (), $ conținut); // setați conținutul ecoului de ieșire $; întoarcere;  

Obiectul cârligului nostru este să înlocuiască [DATETIME] placeholder cu data efectivă înainte ca expedierea oricărei pagini din aplicația noastră să fie trimisă clientului.

Așa cum am discutat mai devreme, ieșirea paginii este deja construită până la data de display_override cârligul este chemat. Deci, primul lucru pe care ne-ar plăcea să-l facem este să preluăm ieșirea care este gata să fie trimisă utilizatorului.

// încărcați instanța $ this-> CI = & get_instance (); // obține ieșirea reală $ contents = $ this-> CI-> output-> get_output ();

get_instance metoda este folosită pentru a instanțiza instanța aplicației și este atribuită acesteia $ This-> CI. Apoi, folosim get_output metodă a producție pentru a prelua conținutul răspunsului.

Restul este destul de simplu. [DATETIME] înlocuitorul trebuie înlocuit cu data reală. Pentru a face lucrurile mai ușoare, Data helper este folosit pentru a face operațiunea dorită și aproape că am făcut-o până la logica noastră de cârlig.

// înlocuiți jetoanele $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[DATETIME]", standard_date (), $ conținut);

În cele din urmă, trebuie să ecou ieșirea ca display_override suprascrie _afişa metoda care este utilizată pentru a trimite ieșirea către client. Așa că trebuie să ne facem noi înșine în acest caz; în caz contrar, ar fi fost tratată de nucleu _afişa metodă.

// setați conținutul ecoului de ieșire $; întoarcere;

De fapt, asta pune capăt povestii cârligului nostru personalizat!

Acum, să mergem mai departe și să facem o nouă pagină a CodeIgniter, astfel încât să putem testa cârligul nostru personalizat. Creați un fișier de controler application / controllere / TokenExample.php cu următorul conținut.

a sarcinii> vizualizare ( 'token_content'); 

Iată cum se află fișierul de vizualizare asociat cerere / vizualizari / token_content.php ar trebui să arate.

Data de azi: [DATETIME]

Și asta este destul de mult. Punctați browser-ul dvs. la http: // codul-igniter-site-url / TokenExample / index și ar trebui să vedeți rezultatul așteptat!

Deci, este sistemul de cârlig la dispoziția dumneavoastră dacă doriți să intrați în fluxul de lucru tipic al aplicației CodeIgniter. Sper că v-ați bucurat de acest articol și că vă ajută în dezvoltarea de aplicații CodeIgniter de zi cu zi.

Concluzie

Astăzi, am trecut printr-una din cele mai încântătoare cârlige de tip CodeIgniter încorporate. Cârligele vă permit să interveniți în fluxul de lucru tipic al cererii de executare a aplicației CodeIgniter.

La începutul articolului am discutat despre conceptul de bază al lui Hooks în CodeIgniter și apoi am discutat diferitele cârlige disponibile în sistem. În final, în ultima secțiune am explorat modul de a crea un cârlig personalizat și lucrările sale interioare.

Nu ezitați să vă exprimați gândurile folosind feed-ul de mai jos. De asemenea, dacă vrei să vin cu anumite subiecte, te rog să-mi spui.

Cod