Os Hooks no Codeigniter são uma ótima ferramenta para que você possa modificar o funcionamento do framework sem mexer nos arquivos de core do sistema. Quando o Codeigniter é executado, ele inicia uma série de processos de acordo com o fluxo do aplicativo.
Com os Hooks, é possível criar ações para serem executadas em um estágio específico da aplicação. Um exemplo prático, é caso você queira executar uma ação após o Codeigniter carregar o construtor do controller.
Abaixo listamos todos os processo que podem ser interceptados, e qual o momento que cada é executado:
- pre_system
É chamado bem cedo durante a execução do sistema. Somente algumas configurações de benchmark e hooks foram carregadas neste momento. Nenhum processo de rotas ou outros foi executado. - pre_controller
Chamado antes de qualquer controller de sua aplicação. Todas as classes de base, rotas e segurança foram executados neste momento. - post_controller_constructor
Chamado depois do controller ser instanciado. Nenhum método do controller foi executado neste momento. - post_controller
Chamado após o controller ser executado. - display_override
Substitui a função _display() do sistema, usado para enviar a página finalizada para o navegador no final da execução do processo. Isso permite que você use a sua metodologia própria de exibição. Note que você vai precisar fazer referência ao superobjeto CI da seguinte maneira: $this->CI =& get_instance(). E depois os dados finalizados estará disponível chamando $this->CI->output->get_output(). - cache_override
Permite que você utilize sua própria função, em vez da _display_cache() na classe de saída. Isso permite que você utilize próprio mecanismo de exibição de cache. - post_system
Chamado depois que a página final é processada e enviado para o navegador, no final da execução do sistema.
Para definir um novo Hook, vamos usar o arquivo application/config/hooks.php.
Através desse arquivo, vamos criar um array com os valores que desejamos executar.
Abaixo há um exemplo de como criar essa configuração:
$hook['post_controller_constructor'] = array( 'class' => 'MeuHook', 'function' => 'minhaFuncaoHook', 'filename' => 'MeuHook.php', 'filepath' => 'hooks', 'params' => array('cerveja', 'vinha', 'petiscos') );
Com essa configuração acima, o Codeigniter tentará instanciar a classe MeuHook, no arquivo application/hooks/MeuHook.php, e executar a função minhaFuncaoHook, logo após o construtor do controller ser criado.
Ela pode ser útil para validação de acesso a este controller, por exemplo.
No caso de você desejar executar vários ganchos (Hooks), é só criar essas configurações em um array bidimensional, conforme abaixo:
$hook['post_controller_constructor'][] = array( 'class' => 'MeuHook', 'function' => 'minhaFuncaoHook', 'filename' => 'MeuHook.php', 'filepath' => 'hooks', 'params' => array('cerveja', 'vinha', 'petiscos') );
$hook['post_controller_constructor'][] = array( 'class' => 'MeuHook', 'function' => 'minhaFuncaoHook2', 'filename' => 'MeuHook.php', 'filepath' => 'hooks' );
Não esqueça de habilitar os hooks no arquivos de application/config/config.php do CodeIgniter.
Seu comentário é muito importante! Conte pra gente o que você achou desse conteúdo.