Fonctionnement du système de crochet de CodeIgniter

En tant que développeur CodeIgniter, vous vous retrouvez parfois dans une situation qui vous oblige à modifier le cœur du cadre ou le flux d'exécution pour répondre à vos exigences personnalisées. Bien entendu, il n'est jamais recommandé de modifier les fichiers principaux car cela rend le processus de mise à niveau fastidieux. Heureusement, le framework CodeIgniter est livré avec le système de hooks, ce qui vous permet de gérer ce scénario..

Dans cet article, nous allons commencer par une introduction au système de crochets dans le cadre CodeIgniter. Ensuite, nous discuterons des différents types d’hameçons disponibles. Et enfin, nous saisirons cette occasion pour explorer la création de crochets personnalisés.

Hooks: Un système pour remplacer le cadre principal

Voyons rapidement ce que dit la documentation officielle de CodeIgniter sur le système de hooks:

La fonction Hooks de CodeIgniter fournit un moyen d'exploiter et de modifier le fonctionnement interne du cadre sans pirater les fichiers principaux.

Cela semble assez explicite, n'est-ce pas? Dans le cadre du développement quotidien de vos applications, si jamais vous vous sentez tenté de modifier les fichiers CodeIgniter principaux, vous devez d’abord envisager le système de crochets pour voir s’il répond à vos besoins..

Supposons que vous souhaitiez créer un système de référence de performances personnalisé pour surveiller l'exécution de l'application. Vous vous rendez compte que les fichiers de base doivent être modifiés pour obtenir le résultat souhaité. Dans ce cas, vous pouvez utiliser le pre_system et le post_system crochets pour entrer dans le flux d'exécution et collecter les statistiques nécessaires.

Si vous connaissez le modèle d'observateur d'événement, le concept est similaire en ce sens que vous écoutez les événements générés par le système et que le code de l'observateur correspondant est exécuté lorsque l'événement observé est déclenché..

Il s’agissait donc d’une introduction de base au système des crochets dans CodeIgniter. Dans la section suivante, nous examinerons de près les différents crochets disponibles que vous pourrez brancher sur le système..

Traversez les différents crochets

Le système de hook CodeIgniter fournit différents points de hook que vous pouvez utiliser lors de la mise en œuvre de vos hooks personnalisés. Le point de raccordement est fondamentalement un certain état dans le flux de travaux d’exécution de la demande à un moment donné.

Par exemple, lorsque vous implémentez le pre_system crochet, vous savez que vous êtes au tout début de la phase d’amorçage. Par contre, si vous avez choisi le post_system accrocher, vous pouvez être sûr que l'exécution est terminée et que la réponse est déjà envoyée au client.

Dans cette section, nous allons passer en revue les différents points de raccordement fournis par le système de raccordement CodeIgniter..

Crochets Système

le pre_system et le post_system les hooks entrent dans cette catégorie car le premier est appelé très tôt pendant la phase d'amorçage, tandis que le dernier est appelé après l'exécution de la page.

Je peux penser à quelques cas d'utilisation qui pourraient être réalisés avec des crochets système:

  • Référence
  • Enregistrement
  • Redirection basée sur des règles
  • Et plus

Crochets de contrôleur

Il y a trois crochets qui entrent dans cette catégorie, alors passons en revue chacun d'eux.

Crochet pré-contrôleur

le pre_controller hook est appelé juste avant l'instanciation de la classe de contrôleur. Donc, si vous souhaitez effectuer des vérifications supplémentaires avant que le contrôleur ne soit appelé, c'est le hook que vous recherchez..

Crochet de constructeur post-contrôleur

Comme son nom l'indique, le post_controller_constructor hook est appelé immédiatement après l'instanciation de l'objet contrôleur et avant l'appel de la méthode elle-même..

À ce stade, vous êtes certain que le contrôleur est instancié et que la méthode va bientôt être appelée. Vous pouvez donc charger toutes les bibliothèques spécifiques au contrôleur ici ou implémenter la validation personnalisée spécifique au contrôleur..

Crochet post-contrôleur

le post_controller hook est appelé après l'exécution de la méthode du contrôleur. Donc, le truc que vous voulez exécuter après l'exécution du contrôleur doit être implémenté avec ce hook.

Voilà donc l'histoire des crochets spécifiques au contrôleur.

Remplace les crochets

Crochet de neutralisation d'affichage

Selon la documentation CodeIgniter, le display_override le crochet remplace le noyau _afficher méthode. Le noyau _afficher méthode est utilisée pour envoyer la sortie au client, et donc en utilisant le display_override accrocher vous pouvez modifier la façon dont la sortie est envoyée à l'utilisateur.

En fait, nous allons explorer ce crochet en détail lorsque nous passerons à la section suivante, dans laquelle nous verrons comment créer un crochet personnalisé..

Crochet de neutralisation de cache

le cache_override le crochet remplace le noyau _display_cache méthode du Sortie classe. le _display_cache method est responsable de la fourniture de la sortie mise en cache, vous pouvez donc utiliser ce raccordement si vous souhaitez diffuser la sortie de la page depuis un emplacement mis en cache différent, au cas où vous auriez implémenté un mécanisme de mise en cache différent.

Ceci termine l’histoire de différents points d’accrochage dans le système d’accroche CodeIgniter. Dans la section suivante, nous verrons comment vous pourriez tirer un avantage du système de hook en implémentant un exemple concret..

Comment créer un crochet personnalisé

Je suis sûr que vous en avez assez de la théorie jusqu'à présent, revenons donc à un développement pratique! Dans cette section, nous allons créer un hook personnalisé pour illustrer les concepts abordés jusqu'à présent dans cet article..

Dans notre cas, nous utiliserons le display_override crochet qui sera responsable du remplacement du jeton. Pour être plus précis, nous remplacerons toutes les occurrences de [DATETIME] avec la date actuelle. Bien sûr, cela ressemble à un cas d'utilisation assez simple, mais vous pouvez facilement l'étendre pour qu'il soit plus spécifique selon vos besoins..

Par défaut, le système de hook est désactivé dans la structure principale. La première chose à faire est donc d’activer le système de hook..

Allez-y et ouvrez le fichier de configuration application / config / config.php.

Recherchez l'extrait suivant et activez-le en modifiant FAUX à VRAI.

Maintenant, nous sommes prêts à définir nos crochets. En fait, CodeIgniter vient déjà avec le fichier application / config / hooks.php que vous pourriez utiliser si vous souhaitez définir des hameçons.

Par défaut, le hooks.php le fichier est vide, ajoutons donc notre code de crochet personnalisé pour le rendre plus significatif.

 'ReplaceToken', 'function' => 'replacePlaceholderCode', 'nom du fichier' => 'ReplaceToken.php', 'filepath' => 'hooks');

La syntaxe permettant de définir un hook personnalisé est assez simple. C'est le crochet $ tableau qui contient tous les crochets qui doivent être exécutés.

La clé de chaque entrée de tableau correspond au nom du hook que vous définissez. Lorsque vous définissez un hook, vous demandez au système d’exécuter un certain morceau de code lorsque quelque chose se produit. C'est exactement ce qui doit être fourni comme valeur de n'importe quel crochet. Passons rapidement en revue chaque touche.

  • le classe la clé contient le nom d'une classe qui contient le code à exécuter.
  • le une fonction la clé contient le nom de la méthode qui sera appelée lors de l'exécution du crochet.
  • le nom de fichier points clés du fichier définissant le code de raccordement complet.
  • le chemin du fichier définit le chemin du répertoire du fichier déclaré sous le nom de fichier clé, et il est relatif à la application annuaire. En règle générale, il est réglé sur crochets, entraînant ainsi une application / crochets structure. Bien sûr, rien ne vous empêche de définir un chemin complètement différent si vous souhaitez le faire..

En remarque, si vous ne voulez pas créer de fichier de classe, vous pouvez également fournir une fonction de fermeture qui sera exécutée lorsque le hook sera déclenché..

Dans notre cas, nous allons créer un fichier ReplaceToken.php et selon la définition du crochet, il doit être placé sous le application / crochets annuaire.

Allez-y et créez un fichier application / hooks / ReplaceToken.php avec le contenu suivant.

CI = & get_instance (); // récupère la sortie actuelle $ contents = $ this-> CI-> output-> get_output (); // remplace les jetons $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[[DATETIME]", standard_date (), $ contents); // définit la sortie echo $ contents; revenir;  

L’objet de notre crochet est de remplacer le [DATETIME] espace réservé avec la date réelle avant la sortie de toute page de notre application est envoyée au client.

Comme nous en avons discuté plus tôt, la sortie de la page est déjà construite au moment où le display_override le crochet s'appelle. Donc, la première chose que nous aimerions faire est de récupérer le résultat prêt à être envoyé à l'utilisateur.

// charge l'instance $ this-> CI = & get_instance (); // récupère la sortie actuelle $ contents = $ this-> CI-> output-> get_output ();

le get_instance méthode est utilisée pour instancier l'instance de l'application, et elle est affectée à $ this-> CI. Ensuite, nous utilisons le get_output méthode du Sortie classe pour récupérer le contenu de la réponse.

Le reste est assez simple. le [DATETIME] l'espace réservé doit être remplacé par la date réelle. Pour faciliter les choses, le rendez-vous amoureux helper est utilisé pour effectuer l'opération souhaitée, et nous en avons presque terminé en ce qui concerne notre logique de hook.

// remplace les jetons $ this-> CI-> load-> helper ('date'); $ contents = str_replace ("[[DATETIME]", standard_date (), $ contents);

Enfin, vous devez faire écho à la sortie en tant que display_override remplace le _afficher méthode utilisée pour envoyer la sortie au client. Nous devons donc le faire nous-mêmes dans ce cas; sinon, il aurait été traité par le noyau _afficher méthode.

// définit la sortie echo $ contents; revenir;

En fait, cela met fin à l'histoire de notre crochet personnalisé!

Maintenant, allons de l'avant et créons une nouvelle page CodeIgniter afin que nous puissions tester notre hook personnalisé. Créer un fichier de contrôleur application / controllers / TokenExample.php avec le contenu suivant.

load-> view ('token_content'); 

Et voici comment le fichier de vue associé application / views / token_content.php devrait regarder.

Date du jour: [DATETIME]

Et c'est à peu près tout. Pointez votre navigateur sur http: // your-code-igniter-site-url / TokenExample / index et vous devriez voir le résultat attendu!

Voilà donc le système de crochets à votre disposition si vous souhaitez entrer dans le flux de travail typique de l'application CodeIgniter. J'espère que vous avez apprécié l'article et qu'il vous aide dans le développement de votre application CodeIgniter au quotidien.

Conclusion

Aujourd'hui, nous avons exploré l'un des crochets de fonctionnalités CodeIgniter intégrés. Les crochets vous permettent d'intervenir dans le flux de travail typique de l'exécution de la demande de votre application CodeIgniter..

Au début de l'article, nous avons abordé le concept de base des points d'ancrage dans CodeIgniter, puis les différents points d'accroche disponibles dans le système. Enfin, dans la dernière section, nous avons exploré comment créer un crochet personnalisé et son fonctionnement interne..

N'hésitez pas à exprimer vos pensées en utilisant le flux ci-dessous. En outre, si vous souhaitez que je propose des sujets spécifiques, merci de me le faire savoir..