Karim's Blog

Un peu de tout sur CSS, HTML, AngularJS, JavaScript, Php et le reste

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.