Ganchos - Estendendo o Núcleo do Framework
O recurso de Ganchos do Code Iginiter provê uma maneira de acessar e modificar os processos internos do framework sem hackear os arquivos base. Quando o Code Igniter roda, ele segue um específico processo de execução, diagramado na página do Fluxograma da Aplicação. Haverá momentos, no entanto, onde você queira que alguma ação seja executada em um estágio particular do processo de execução. Por exemplo, você pode querer rodar um script logo antes do seu controller ser carregado, o logo depois, ou você pode querer disparar um de seus próprios scripts em algum outro lugar.
Habilitando os Ganchos
O recurso de ganchos pode ser habilitado/desabilitado globalmente, configurando-se o seguinte item no arquivo application/config/config.php:
$config['enable_hooks'] = TRUE;
Definindo um Gancho
Ganchos são definidos no arquivo application/config/hooks.php. Cada um é especificado como uma array com esse protótipo:
$hook['pre_controller'] = array(
'class' => 'MinhaClasse',
'function' => 'MinhaClasse',
'filename' => 'MinhaClasse.php',
'filepath' => 'MinhaClasse',
'params' => array('cerveja', 'vinho', 'salgadinhos')
);
Notas:
O índice da array corresponde ao nome do particular ponto de gancho que você queira usar. No exemplo acima, o ponto de gancho é pre_controller.
Uma lista de pontos de ganchos aparece abaixo. Os seguintes itens devem ser definidos em sua array de gancho associada:
- class O nome da classe que você deseja chamar. Se desejar usar uma função procedural no lugar de uma classe, deixe este item em branco.
- function A função que deseja chamar.
- filename O nome do arquivo contendo sua classe/função.
- filepath O nome do diretório contendo seu script. Note: Seu script deve estar localizado num diretório DENTRO do seu diretório application, portanto o caminho do arquivp é relativo a este diretório. Por exemplo, se seu script está localizado em application/hooks, simplesmente use hooks como seu caminho de arquivo. Se seu script está localizado em application/hooks/utilities use hooks/utilities como seu caminho de arquivo. Sem a barra invertida.
- params Quaisquer parâmetros que deseje passar ao script. Este item é opcional
Múltiplas chamadas para o mesmo Gancho
Se você quer usar o mesmo ponto de gancho em mais de um script, simplemente faça sua array multi-dimensional, como esta:
$hook['pre_controller'][] = array(
'class' => 'MinhaClasse',
'function' => 'MinhaClasse',
'filename' => 'MinhaClasse.php',
'filepath' => 'MinhaClasse',
'params' => array('cerveja', 'vinho', 'salgadinhos')
);
$hook['pre_controller'][] = array(
'class' => 'MinhaOutraClasse',
'function' => 'MinhaOutraFuncao',
'filename' => 'MinhaOutraClasse.php',
'filepath' => 'ganchos',
'params' => array('vermelho', 'amarelo', 'azul')
);
Note os colchetes após cada indíce da array:
$hook['pre_controller'][]
Isto permite que você use o mesmo ponto de gancho com múltiplos scripts. A ordem que você definir em sua array será a ordem de execução.
Pontos de Gancho
Abaixo está uma lista dos pontos disponíveis.- pre_system
Chamado bem cedo durante a execução do sistema. Apenas as classes benchmark e hooks estarão carregadas nesta hora. Nem roteamento ou outros processos rodaram. - pre_controller
Chamado imediatamente antes de qualquer um de seus controllers serem chamados. Todas as classes básicas, roteamento, e checagem de segurança rodaram. - post_controller_constructor
Chamado imediatamente após seu controller ser instanciado, mas antes de qualquer chamadas de método rodarem. - post_controller
Chamado imediatamente após seu controller ser totalmente executado. - display_override
Sobrepôe a função _display(), usada para enviar a página finalizada ao web browser no final da execução do sistema. Isto permite que você use sua própria metodologia de display. Note que os dados finalizados estão disponíveis ao se chamar $this->output->get_output() - cache_override
Permite que você chame sua própria função no lugar da _display_cache() na classe output. Isto possibilita que você use seu próprio mecanismo de cache display. - scaffolding_override
Permite uma requisição scaffolding para disparar seu próprio script. - post_system
Chamado após a página renderizada final ser enviada ao browser, no final da execução do sistema após os dados finalizados serem enviados ao browser.