Hooks

Hooks: Extendendo o framework

Os hooks são a maneira mais fácil de você extender o framework sem alterar os arquivos de Core. Através dos hooks você pode criar rotinas para serem executadas antes do carregamento do sistema, antes do carregamento de um controller, após a renderização de uma página, ou seja, dentro do fluxo de execução do CodeIgniter.

Fluxo de Execução do CodeIgniter

Fluxo de Execução do CodeIgniter

 

Os hooks podem ser criados para serem executados nos seguintes pontos do fluxo:

  • pre_system: antes do sistema ser completamente carregado
  • pre_controller: imediatamente após o controller ser chamado, antes de sua execução
  • post_controller_constructor: logo após o método construtor do controller ser executado
  • post_controller: imediatamente após o controller ser chamado
  • display_override: substitui o método _display(), responsável por enviar a página finalizada para o browser, por outra rotina de exibição
  • cache_override: substitui o método _display_cache(), permitindo que seja utilizada outra rotina
  • post_system: chamado imediatamente após a renderização da página no browser

Ativando os hooks

Para ativar os hooks basta acessar o arquivo application/config/config.php e alterar o valor da variável $config[‘enable_hooks’] para TRUE. Feito isso o CodeIgniter passará a verificar os hooks configurados enquanto o sistema estiver sendo utilizado.

Definindo os hooks

A definição dos hooks é feita no arquivo application/config/hooks.php. Esse arquivo é parecido com o config.php, onde a variável principal é do tipo array.

Para definir um hook você precisa passar 5 informações:

  • class: nome da classe que contém a rotina a ser executada (não é obrigatório, pois você não precisa ter uma classe para criar uma função)
  • function: função responsável pela execução da rotina
  • filename: nome do arquivo onde estão a classe e a função definidas anteriormente
  • filepath: caminho do arquivo (geralmente ficam armazenados em applications/hooks)
  • params: parâmetros necessários para a execução

Veja a seguir um exemplo de como é feita a definição de um hook:

$hook['pre_controller'] = array(
        'class' => 'NomeClasse',
        'function' => 'NomeFuncao',
        'filename' => 'SuaClasse.php',
        'filepath' => 'path/do/arquivo/da/classe',
        'params' => array('parametros','necessarios')
);

Repare que foi utilizada uma variável $hook, que é um array, e a chave utilizada foi o ponto de fluxo em que o hook deve ser executado, e no caso do código acima foi utilizado o pre_controller. Se quisesse executar antes da execução completa do sistema bastaria utilizar pre_system.

Caso precise utilizar mais  de um hook para o mesmo ponto de fluxo, basta criar as chamadas usando $hook[‘pre_controller’] como um array multidimensional.

$hook['pre_controller'][] = array(
        'class' => 'NomeClasse',
        'function' => 'NomeFuncao',
        'filename' => 'SuaClasse.php',
        'filepath' => 'path/do/arquivo/da/classe',
        'params' => array('parametros','necessarios')
);

$hook['pre_controller'][] = array(
        'class' => 'NomeClasseB',
        'function' => 'NomeFuncaoB',
        'filename' => 'SuaClasseB.php',
        'filepath' => 'path/do/arquivo/da/classeB',
        'params' => array('parametros','necessarios')
);

Utilidade dos hooks

Os hooks são úteis para diversas operações, como por exemplo:

Viu como é fácil trabalhar com hooks e extender o framework sem precisar alterar os arquivos do Core e ter problemas para atualizar a versão do CodeIgniter para uma nova depois?

Aproveite esse conhecimento adquirido e melhore ainda mais o fluxo de execução das tarefas do seu sistema.

Até a próxima!