Hvordan CodeIgniter's Hook System Works

Som en CodeIgniter utvikler, noen ganger ender du opp i en situasjon som krever at du endrer kjernen i rammen eller gjennomføringsflyten for å oppfylle dine egendefinerte krav. Selvfølgelig anbefales det aldri å endre kjernefilene da det gjør oppgraderingsprosessen besværlig. Heldigvis kommer CodeIgniter-rammen med kroker-systemet, som lar deg håndtere dette scenariet.

I denne artikkelen starter vi med en introduksjon til krokene i CodeIgniter-rammeverket. Deretter diskuterer vi de forskjellige typer kroker som er tilgjengelige. Og til slutt tar vi denne muligheten til å utforske etableringen av tilpassede kroker.

Kroker: Et system for å overstyre kjernerammen

La oss ta en rask titt på hva den offisielle CodeIgniter-dokumentasjonen sier om kroker-systemet:

CodeIgniter's Hooks-funksjonen gir et middel til å tappe inn og endre rammens indre arbeid uten hacking av kjernefiler.

Høres ganske selvforklarende, ikke sant? I din daglige applikasjonsutvikling, hvis du noen gang finner deg fristet til å endre kjernen CodeIgniter-filer, bør du først vurdere kroksystemet for å se om det oppfyller dine krav.

La oss anta at du vil bygge et tilpasset ytelses-referansesystem for å overvåke programgjennomføringen. Du skjønner at kjernefilene må modifiseres for å oppnå ønsket utgang. I så fall kan du bruke pre_system og post_system kroker for å komme inn i utførelsen og samle statistikken etter behov.

Hvis du er klar over hendelsesobservasjonsmønsteret, er konseptet likt ved at du lytter etter de systemgenererte hendelsene, og den tilsvarende observatørkoden blir utført når den observerte hendelsen utløses.

Så det var en grunnleggende introduksjon til krokene i CodeIgniter. I neste avsnitt vil vi se nærmere på de forskjellige krokene som er tilgjengelige for at du skal plugge inn i systemet.

Gå gjennom de forskjellige kroker

CodeIgniter krok systemet gir forskjellige krok punkter som du kan bruke mens du implementerer dine egendefinerte kroker. Krokpunktet er i utgangspunktet en viss tilstand i forespørselseksjonsflyten på et gitt tidspunkt.

For eksempel når du implementerer pre_system krok, du vet at du er i begynnelsen av bootstrapping-fasen. På den annen side, hvis du har valgt post_system krok, du kan være sikker på at kjøringen er fullført og svaret allerede er sendt til klienten.

I denne delen går vi gjennom de forskjellige krokpunktene som er gitt av CodeIgniter krok systemet.

System kroker

De pre_system og post_system kroker faller under denne kategorien som den tidligere kalles veldig tidlig under bootstrapping-fasen, mens den sistnevnte kalles etter at sidens utførelse er fullført.

Jeg kan tenke på noen brukssaker som kunne oppnås med systemkroker:

  • benchmark
  • logging
  • Regelbasert omdirigering
  • Og mer

Kontrollerkrok

Det er tre kroker som faller under denne kategorien, så la oss gå gjennom hver av dem.

Pre Controller Hook

De pre_controller krok kalles like før kontrollerklassen blir instantiated. Så, hvis du ønsker å gjøre ytterligere kontroller før kontrolleren blir kalt, er dette kroken du leter etter.

Post Controller Constructor Hook

Som navnet antyder, den post_controller_constructor krok kalles umiddelbart etter at kontrolleren objektet er instantiated og før den faktiske metoden ringe.

På dette tidspunktet er du sikker på at kontrolleren er instansiert og metoden kommer til å bli kalt snart, slik at du kan laste inn noen kontrollerespesifikke biblioteker her, eller du kan også implementere den regulator-spesifikke egendefinerte valideringen.

Post Controller Hook

De post_controller krok kalles etter utførelsen av kontrolleren metoden. Så ting som du vil utføre etter utførelse av kontrolleren, skal implementeres med denne kroken.

Så det var historien om de kontrollerende spesifikke krokene.

Overstyrer kroker

Vis overstyringskrok

I henhold til CodeIgniter dokumentasjonen, display_override krok overstyrer kjernen _vise metode. Kjernen _vise Metoden brukes til å sende utdata til klienten, og dermed ved å bruke display_override koble deg kan endre måten utgangen sendes til brukeren.

Faktisk vil vi utforske denne kroken i detalj når vi går videre til neste avsnitt, hvor vi diskuterer hvordan du lager en tilpasset krok.

Cache Override Hook

De cache_override krok overstyrer kjernen _display_cache metode av Produksjon klasse. De _display_cache Metoden er ansvarlig for å betjene den cachede utgangen, slik at du kan bruke denne kroken hvis du ønsker å betjene sideutgangen fra den forskjellige bufret posisjonen bare hvis du har implementert en annen cachemekanisme.

Det avsluttes historien om forskjellige krokpunkter i CodeIgniter krok systemet. I neste avsnitt ser vi hvordan du egentlig kunne dra nytte av kroksystemet ved å implementere et ekteeksempel.

Hvordan lage en tilpasset krok

Jeg er sikker på at du har hatt nok teori så langt, så la oss komme tilbake til noen praktisk utvikling! I denne delen skal vi lage en tilpasset krok for å demonstrere konseptene som er diskutert så langt i denne artikkelen.

I vårt tilfelle bruker vi display_override krok som vil være ansvarlig for token erstatning. For å være mer presis erstatter vi alle forekomster av [DATO TID] med nåværende dato. Selvfølgelig høres det ut som en ganske enkel brukstilstand, men du kan enkelt utvide den til å være mer spesifikk som per dine krav.

Kaksystemet er som standard deaktivert i kjernerammen, så det første du må gjøre er å aktivere kroksystemet.

Gå videre og åpne konfigurasjonsfilen application / konfig / config.php.

Se etter følgende utdrag og slå den på ved å endre FALSK til EKTE.

Nå er vi klare til å definere våre kroker. Faktisk kommer CodeIgniter allerede med filen application / konfig / hooks.php som du kan bruke bør du ønske å definere kroker.

Som standard er hooks.php filen er tom, så la oss legge til vår egendefinerte krok kode for å gjøre det mer meningsfylt.

 'ReplaceToken', 'function' => 'replacePlaceholderCode', 'filnavn' => 'ReplaceToken.php', 'filepath' => 'kroker');

Syntaxen for å definere en tilpasset krok er ganske enkel. Det er $ krok array som inneholder alle kroker som må utføres.

Nøkkelen til hver oppføring er navnet på kroken selv du definerer. Når du definerer en krok, forteller du systemet for å utføre et bestemt stykke kode når noe skjer. Det er akkurat det som må leveres som en verdi av en hvilken som helst krok. La oss gå gjennom hver nøkkel raskt.

  • De klasse nøkkelen inneholder navnet på en klasse som inneholder koden som må utføres.
  • De funksjon nøkkel innehar navnet på metoden som vil bli kalt på krokutførelsen.
  • De filnavn nøkkelpunkter til filen som definerer hele krokoden.
  • De filepath definerer katalogbanen til filen deklarert under filnavn nøkkel, og det er i forhold til applikasjon katalogen. Vanligvis er det satt til kroker, dermed resulterer i en application / kroker struktur. Selvfølgelig er det ingenting som hindrer deg fra å definere en helt annen vei hvis du ønsker å gjøre det.

Som en side notat, hvis du ikke vil lage en klassefil, kan du også levere en lukkingsfunksjon som vil bli utført når kroken utløses.

I vårt tilfelle lager vi en fil ReplaceToken.php og i henhold til krokdefinisjonen må den plasseres under application / kroker katalog.

Gå videre og lag en fil application / kroker / ReplaceToken.php med følgende innhold.

CI = & get_instance (); // få den faktiske utgangen $ contents = $ this-> CI-> output-> get_output (); // erstatte tokens $ this-> CI-> load-> hjelper ('date'); $ content = str_replace ("[DATETIME]", standard_date (), $ innhold); // angi output echo $ innholdet; komme tilbake;  

Hensikten med vår krok er å erstatte [DATO TID] stedholder med den faktiske datoen før utgangen av en side i vår søknad sendes til klienten.

Som vi har diskutert tidligere, er produksjonen av siden allerede bygget etter den tiden den display_override krok kalles. Så det første vi ønsker å gjøre er å hente utgangen som er klar til å bli sendt til brukeren.

// last forekomsten $ this-> CI = & get_instance (); // få den faktiske utgangen $ contents = $ this-> CI-> output-> get_output ();

De get_instance Metoden brukes til å instantiere applikasjonsinstansen, og den er tildelt $ Dette-> CI. Deretter bruker vi get_output metode av Produksjon klassen for å hente responsinnholdet.

Resten er ganske enkel. De [DATO TID] stedholder må byttes ut med den aktuelle datoen. For å gjøre tingene enklere, vil Dato Helper brukes til å utføre den ønskede operasjonen, og vi er nesten ferdige så langt som vår kroklogikk er opptatt av.

// erstatte tokens $ this-> CI-> load-> hjelper ('date'); $ content = str_replace ("[DATETIME]", standard_date (), $ innhold);

Til slutt må du ekko utdataene som display_override overstyrer _vise metode som brukes til å sende utdata til klienten. Så vi må gjøre det selv i dette tilfellet; ellers ville det vært blitt håndtert av kjernen _vise metode.

// angi output echo $ innholdet; komme tilbake;

Faktisk slutter historien om vår tilpassede krok!

Nå, la oss gå videre og lage en ny CodeIgniter-side slik at vi kan teste vår tilpassede krok. Opprett en kontrollerfil application / kontrollere / TokenExample.php med følgende innhold.

last> vis ( 'token_content'); 

Og her er hvordan den tilknyttede visningsfilen application / visninger / token_content.php bør se.

Dagens dato: [DATETIME]

Og det er ganske mye det. Pek nettleseren din til http: // your-code-igniter-site-url / TokenExample / indeksen og du bør se forventet utgang!

Så det er kroksystemet til din disposisjon hvis du ønsker å komme inn i den typiske arbeidsflyten i CodeIgniter applikasjonen. Jeg håper at du har hatt glede av artikkelen, og at den hjelper deg i din daglige CodeIgniter applikasjonsutvikling.

Konklusjon

I dag gikk vi gjennom en av de spennende innebygde CodeIgniter-funksjonskrokene. Kroker gir deg mulighet til å gripe inn i den typiske forespørselseksjonsflyten i CodeIgniter-programmet.

I begynnelsen av artikkelen diskuterte vi det grunnleggende konseptet med kroker i CodeIgniter, og deretter diskuterte vi de forskjellige kroker som er tilgjengelige i systemet. Til slutt, i det siste avsnittet, undersøkte vi hvordan man skaper en tilpasset krok og dens indre arbeid.

Ikke nøl med å uttrykke dine tanker ved å bruke feedet under. Også, hvis du vil at jeg skal komme opp med bestemte emner, vennligst bare gi meg beskjed.