CodeIgniter : Etendre le Cœur du Framework
Activer les Hooks
La fonctionnalité des hooks peut être globalement activée ou désactivée en modifiant la ligne suivante dans le fichier application/config/config.php :
$config['enable_hooks'] = TRUE;
Définir un Hook
Les hooks sont définis dans le fichier application/config/hooks.php. Chaque hook est déclaré comme un tableau de ce type :
$hook['pre_controller'] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
Remarques : L'index du tableau doit correspondre au nom du "point d'accroche" que vous voulez utiliser. Sur l'exemple ci-dessus, le point d'accroche est pre_controller. Une liste des points d'accroche est définie ci-dessous. Les rubriques suivantes devront être définies dans votre tableau associatif du hook.
- class : le nom de la classe à appeler, si vous préférez utiliser une fonction procédurale à la place d'une classe, laisse le à blanc,
- function : le nom de la fonction à appeler,
- filename : le nom du fichier contenant votre classe/fonction,
- filepath : le nom du dossier contenant votre script. Remarque : Votre script doit être situé dans un dossier lui-même situé DANS votre répertoire d'application. Le chemin de fichier est donc relatif. Par exemple, si votre script est situé dans application/hooks, vous utiliserez simplement hooks comme chemin de fichier. Si votre script est situé dans application/hooks/utilities, vous utiliserez hooks/utilities, sans slash final.
- params : paramètres que vous voulez passer à votre script. Facultatif.
Plusieurs Appels au Même Hook
Si vous voulez utiliser le même point d'accroche avec plusieurs scripts, déclarez simplement un tableau multi-dimensionnel, comme ceci :
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
$hook['pre_controller'][] = array(
'class' => 'MyOtherClass',
'function' => 'MyOtherfunction',
'filename' => 'Myotherclass.php',
'filepath' => 'hooks',
'params' => array('red', 'yellow', 'blue')
);
Notez les crochets après chaque index :
$hook['pre_controller'][]
Cela vous permet d'avoir le même hook pour plusieurs scripts. L'ordre de définition de votre tableau sera l'ordre d'exécution.
Les Points d'Accroche
Voici la liste des points d'accroche possible :
- pre_system
Appelé très tôt durant l'exécution du système. Seules le benchmark et les hooks ont été chargés. Pas de routage ou autres appels de processus. - pre_controller
Appelé juste avant le chargement de vos contrôleurs. Toutes les classes de base, le routage et les vérifications de sécurité ont été activées. - post_controller_constructor
Appelé immédiatement après le chargement de vos contrôleurs, mais prioritaire sur les appels aux méthodes. - post_controller
Appelé immédiatement après l'exécution complète de votre contrôleur. - display_override
Surcharge la fonction _display(), utilisée pour envoyer au navigateur la page finalisée à la fin de l'exécution. Elle vous permet d'utiliser votre propre méthode d'affichage. Notez que vous devrez référencer le super objet CI avec $this->CI =& get_instance(). Les données finalisées seront disponible en appelant $this->CI->Output->get_output()<, - cache_override
Vous permet d'appeler votre propre fonction à la place de la fonction _display_cache() de la classe d'output. Vous utiliserez ainsi votre propre mécanisme d'affichage de cache, - scaffolding_override
Permet à une requête de scaffolding de déclencher votre propre script, - post_system
Appelé après le rendu final de la page sur le navigateur, à la fin de l'exécution après que les données finalisées soient envoyées au serveur.