Hoe het haaksysteem van CodeIgniter werkt

Als een CodeIgniter-ontwikkelaar belandt u soms in een situatie waarin u de kern van het framework of de uitvoeringsstroom moet wijzigen om aan uw aangepaste vereisten te voldoen. Natuurlijk wordt het nooit aangeraden om de kernbestanden aan te passen, omdat het upgradeproces hierdoor omslachtig wordt. Gelukkig komt het CodeIgniter-framework met het hooks-systeem, waarmee je met dit scenario kunt omgaan.

In dit artikel beginnen we met een introductie van het hooks-systeem in het CodeIgniter-framework. Vervolgens bespreken we de verschillende typen haken die beschikbaar zijn. En tot slot grijpen we deze gelegenheid aan om het maken van aangepaste haken te verkennen.

Hooks: een systeem om het kernraamwerk te negeren

Laten we even kijken naar wat de officiële CodeIgniter-documentatie zegt over het hooks-systeem:

CodeIgniter's Hooks-functie biedt een manier om de interne werking van het framework aan te boren en aan te passen zonder de core-bestanden te hacken.

Klinkt nogal vanzelfsprekend, toch? In uw dagelijkse applicatieontwikkeling, als u ooit in de verleiding komt om de belangrijkste CodeIgniter-bestanden te wijzigen, moet u eerst het hooks-systeem bekijken om te zien of het aan uw vereisten voldoet.

Laten we aannemen dat u een aangepast prestatie-benchmarksysteem wilt bouwen om de uitvoering van de toepassing te bewaken. Je realiseert je dat de kernbestanden moeten worden aangepast om de gewenste uitvoer te bereiken. In dat geval zou u het kunnen gebruiken pre_system en de post_system haakt om in de uitvoeringsstroom te komen en de statistieken te verzamelen als dat nodig is.

Als je je bewust bent van het gebeurteniswaarnemerspatroon, is het concept vergelijkbaar doordat je luistert naar de door het systeem gegenereerde gebeurtenissen en de bijbehorende waarnemerscode wordt uitgevoerd wanneer de waargenomen gebeurtenis wordt geactiveerd.

Dus dat was een basisinleiding voor het hooks-systeem in CodeIgniter. In het volgende gedeelte zullen we de verschillende haken bekijken die voor u beschikbaar zijn om in het systeem te pluggen.

Ga door de verschillende haken

Het haaks systeem van CodeIgniter biedt verschillende haakpunten die u kunt gebruiken bij het uitvoeren van uw aangepaste haken. Het haakpunt is in principe een bepaalde status in de workflow voor het uitvoeren van aanvragen op een bepaald moment.

Bijvoorbeeld wanneer u de pre_system hook, je weet dat je aan het begin staat van de bootstrappingfase. Aan de andere kant, als u de post_system hook, kunt u er zeker van zijn dat de uitvoering is voltooid en dat het antwoord al naar de client is verzonden.

In dit gedeelte gaan we door de verschillende haakpunten die worden geleverd door het haaksysteem van CodeIgniter.

Systeemhaken

De pre_system en de post_system haken vallen onder deze categorie omdat de eerste heel vroeg wordt genoemd tijdens de bootstrappingfase, terwijl de laatste wordt aangeroepen nadat de pagina-uitvoering is voltooid.

Ik kan een paar gebruiksgevallen bedenken die met systeemhaken kunnen worden bereikt:

  • criterium
  • logging
  • Op regels gebaseerde omleiding
  • En meer

Controller Hooks

Er zijn drie haken die onder deze categorie vallen, dus laten we ze allemaal doornemen.

Pre Controller Hook

De pre_controller hook wordt aangeroepen juist voordat de controllerklasse wordt geïnstantieerd. Dus als u nog meer controles wilt doen voordat de controller wordt gebeld, is dit de haak waarnaar u op zoek bent.

Bericht controller Constructor Hook

Zoals de naam al doet vermoeden, de post_controller_constructor hook wordt aangeroepen onmiddellijk nadat het controllerobject is geïnstantieerd en voorafgaand aan de daadwerkelijke methode-aanroep.

Op dit punt weet u zeker dat de controller wordt geïnstantieerd en dat de methode binnenkort wordt geopend, dus u kunt hier alle controller-specifieke bibliotheken laden, of u kunt ook de controller-specifieke aangepaste validatie implementeren.

Post Controller Hook

De post_controller hook wordt genoemd naar de uitvoering van de controllermethode. Dus de dingen die u wilt uitvoeren na uitvoering van de controller moeten met deze haak worden geïmplementeerd.

Dus dat was het verhaal van de controller-specifieke hooks.

Negeert Hooks

Weergave negeren Hook

Volgens de documentatie van CodeIgniter, de display_override haak overschrijft de kern _weergeven methode. De kern _weergeven methode wordt gebruikt om de uitvoer naar de client te verzenden, en dus met behulp van de display_override hook zou je de manier waarop de output naar de gebruiker gestuurd wordt kunnen veranderen.

We zullen deze haak zelfs in detail onderzoeken als we doorgaan naar de volgende sectie, waarin we bespreken hoe je een aangepaste haak kunt maken.

Cache negeren Hook

De cache_override haak overschrijft de kern _display_cache methode van de uitgang klasse. De _display_cache methode is verantwoordelijk voor het serveren van de cache-uitvoer, dus je zou deze hook kunnen gebruiken als je de pagina-uitvoer van de verschillende cached location wilt dienen voor het geval je een ander caching-mechanisme hebt geïmplementeerd.

Dat beëindigt het verhaal van verschillende haakpunten in het CodeIgniter-haaksysteem. In het volgende gedeelte zullen we zien hoe u het haaksysteem kunt benutten door een realistisch voorbeeld te implementeren.

Hoe een aangepaste haak te maken

Ik weet zeker dat je tot nu toe genoeg theorie hebt gehad, dus laten we teruggaan naar een praktische ontwikkeling! In deze sectie maken we een aangepaste haak om de concepten te demonstreren die tot nu toe in dit artikel zijn besproken.

In ons geval gebruiken we de display_override hook die verantwoordelijk is voor de token vervanging. Om preciezer te zijn, vervangen we alle exemplaren van [DATUM TIJD] met de huidige datum. Dat klinkt natuurlijk als een vrij eenvoudig gebruik, maar je zou het gemakkelijk kunnen uitbreiden om specifieker te zijn, afhankelijk van je vereisten.

Standaard is het haaksysteem uitgeschakeld in het basisraamwerk, dus het eerste wat u moet doen, is het haaksysteem inschakelen.

Ga je gang en open het configuratiebestand application / config / config.php.

Zoek naar het volgende fragment en schakel het in door het te wijzigen VALSE naar TRUE.

Nu zijn we klaar om onze haken te definiëren. In feite komt CodeIgniter al met het bestand application / config / hooks.php die je zou kunnen gebruiken als je haken zou willen definiëren.

Standaard is de hooks.php bestand is leeg, dus laten we onze aangepaste hook-code toevoegen om deze zinvoller te maken.

 'ReplaceToken', 'function' => 'replacePlaceholderCode', 'filename' => 'ReplaceToken.php', 'filepath' => 'hooks');

De syntaxis van het definiëren van een aangepaste haak is vrij eenvoudig. Het is de $ haak array die alle hooks bevat die moeten worden uitgevoerd.

De sleutel van elk array-item is de naam van de haak zelf die u definieert. Wanneer je een haak definieert, vertel je het systeem om een ​​bepaald stuk code uit te voeren wanneer er iets gebeurt. Dat is precies wat moet worden geleverd als een waarde voor elke haak. Laten we elke toets snel doorlopen.

  • De klasse sleutel bevat de naam van een klasse die de code bevat die moet worden uitgevoerd.
  • De functie sleutel bevat de naam van de methode die wordt aangeroepen voor de uitvoering van de haak.
  • De bestandsnaam sleutelpunten naar het bestand dat de volledige haakcode definieert.
  • De bestandspad definieert het directorypad van het bestand gedeclareerd onder de bestandsnaam sleutel, en het is relatief aan de toepassing directory. Over het algemeen is dit ingesteld op haken, dus resulterend in een application / hooks structuur. Natuurlijk houdt niets je tegen om een ​​heel ander pad te bepalen als je dat wilt.

Als een kanttekening, als u geen klassenbestand wilt maken, kunt u ook een afsluitfunctie opgeven die wordt uitgevoerd wanneer de haak wordt geactiveerd.

In ons geval zullen we een bestand maken ReplaceToken.php en volgens de haakdefinitie moet het onder de application / hooks directory.

Ga je gang en maak een bestand aan application / hooks / ReplaceToken.php met de volgende inhoud.

CI = & get_instance (); // ontvang de feitelijke uitvoer $ contents = $ this-> CI-> output-> get_output (); // vervang de tokens $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[DATETIME]", standard_date (), $ contents); // stel de output echo $ contents in; terug te keren;  

Het doel van onze haak is om de [DATUM TIJD] tijdelijke aanduiding met de werkelijke datum voordat de uitvoer van een pagina in onze toepassing naar de klant wordt verzonden.

Zoals we eerder hebben besproken, is de uitvoer van de pagina al gebouwd op het moment dat de display_override haak wordt genoemd. Dus het eerste dat we willen doen is de uitvoer ophalen die klaar is om naar de gebruiker te worden verzonden.

// laad de instantie $ this-> CI = & get_instance (); // ontvang de feitelijke uitvoer $ contents = $ this-> CI-> output-> get_output ();

De get_instance methode wordt gebruikt om de toepassingsinstantie te instantiëren en waaraan deze is toegewezen $ This-> CI. Vervolgens gebruiken we de get_output methode van de uitgang klasse om de antwoordinhoud op te halen.

De rest is vrij eenvoudig. De [DATUM TIJD] placeholder moet worden vervangen door de werkelijke datum. Om dingen gemakkelijker te maken, de datum helper wordt gebruikt om de gewenste operatie uit te voeren, en we zijn bijna klaar voor zover het onze haaklogica betreft.

// vervang de tokens $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[DATETIME]", standard_date (), $ contents);

Ten slotte moet u de uitvoer weergeven als de display_override overschrijft de _weergeven methode die wordt gebruikt om de uitvoer naar de client te verzenden. Dus we moeten het in dit geval zelf doen; anders zou het door de kern zijn afgehandeld _weergeven methode.

// stel de output echo $ contents in; terug te keren;

In feite eindigt dat het verhaal van onze aangepaste haak!

Laten we nu een nieuwe CodeIgniter-pagina maken, zodat we onze aangepaste haak kunnen testen. Maak een controllerbestand aan application / controllers / TokenExample.php met de volgende inhoud.

load> view ( 'token_content'); 

En hier is hoe het bijbehorende weergavebestand application / views / token_content.php zou moeten kijken.

De datum van vandaag: [DATETIME]

En dat is zo ongeveer het. Richt uw browser op http: // uw-code-ontsteker-site-url / TokenExample / index en u zou de verwachte output moeten zien!

Dus dat is het haaksysteem tot uw beschikking als u de typische workflow van de CodeIgniter-toepassing wilt leren kennen. Ik hoop dat je het artikel leuk vond en dat het je helpt bij je dagelijkse ontwikkeling van de CodeIgniter-applicatie.

Conclusie

Vandaag hebben we een van de spannende ingebouwde functie-haken CodeIgniter doorgenomen. Met hooks kunt u ingrijpen in de typische workflow voor het uitvoeren van aanvragen van uw CodeIgniter-toepassing.

Aan het begin van het artikel bespraken we het basisconcept van Hooks in CodeIgniter en vervolgens bespraken we de verschillende hooks die beschikbaar zijn in het systeem. Ten slotte hebben we in het laatste deel onderzocht hoe je een aangepaste haak en de interne werking ervan kunt maken.

Aarzel niet om uw mening te geven met behulp van de onderstaande feed. Als je wilt dat ik met specifieke onderwerpen kom, laat het me dan alsjeblieft weten.