Trabalhando com Hooks no Codeigniter

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.

Templates PHP: Dicas de como usar, bibliotecas e exemplo

A principal função de templates PHP é separar todo o código PHP da interface HTML.

Existem diversas soluções no mercado, algumas presentes há anos. Talvez a mais utilizada seja a Smarty para criar templates php. Outra que também é bastante utilizada é Template Power.

Talvez a Template Power seja um plus mais leve para sua biblioteca, mas a preferência por qual usar deve ser de escolha do programador. Fica aqui apenas a dica dessas bibliotecas para usar templates PHP.

Outra maneira simples para usar templates com PHP, é as funções que passamos abaixo.

A estrutura para templates PHP

Nessa estrutura HTML abaixo, marcamos algumas tags que serão as referências para o código PHP fazer as substituições por valores dinâmicos.

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title>{titulo}</title>
</head>
<body>
	<section>
		<article>
			<header>
				<h1>{artigo_titulo}</h1>
			</header>
			<div>{artigo_conteudo}</div>
		</article>
	</section>
	<footer>{rodape}</footer>
</body>
</html>

Usando os símbolos de chaves “{}”, marcamos itens no HTML para serem substituídos.

Agora, para fazer a alteração das marcações, vamos criar duas funções bem simples, conforme abaixo:

function getTemplate( $template, $folder = "templates/" ) 
{
	$arqTemp = $folder.$template; // criando var com caminho do arquivo
	$content = '';

	if ( is_file( $arqTemp ) ) // verificando se o arq existe
		$content = file_get_contents( $arqTemp ); // retornando conteúdo do arquivo

	return $content;
}

A função getTemplate é responsável por ler o arquivo e retornar ele com as tags de marcação. Já a função parseTemplate é quem vai ler o template carregado e substituir as tags de marcação.

Veja abaixo um arquivo PHP que irá utilizar as funções para criar templates em PHP.

function parseTemplate( $template, $array ) 
{
	foreach ($array as $a => $b)// recebemos um array com as tags
		$template = str_replace( '{'.$a.'}', $b, $template );

	return $template; // retorno o html com conteúdo final
}

$arrTags = array(
	'titulo'=>'Dicas de PHP',
	'artigo_titulo'=>'Templates em PHP - Dicas de PHP',
	'artigo_conteudo'=>'Demonstração de como criar um sistema simples de templates com PHP',
	'rodape'=>'© Dicas de PHP - Todos direitos reservados 2012 '
);

$template 		= getTemplate( 'templates/dicas.html' );
$templateFinal 	= parseTemplate( $template, $arrTags );

echo $templateFinal; // output do código

O resultado final do código, deve ser o HTML abaixo:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title>Dicas de PHP</title>
</head>
<body>
	<section>
		<article>
			<header>
				<h1>Templates em PHP - Dicas de PHP</h1>
			</header>
			<div>Demonstração de como criar um sistema simples de templates com PHP</div>
		</article>
	</section>
	<footer>© Dicas de PHP - Todos direitos reservados 2012 </footer>
</body>
</html>

Esse código é facilmente adaptado para usar template em PHP.

No padrão MVC no PHP isso é muito útil para separar as camadas de códigos, como os controllers, models e views.

Frameworks PHP

Hoje o PHP tem diversos frameworks que auxiliam no desenvolvimento de projetos WEB. Os mais conhecidos serão listados abaixo. Dentro de alguns dias vamos estar detalhando o funcionamento e indicando matérias para auxiliar no estudo desses frameworks.

Codeigniter:

CodeIgniter é um Framework de Desenvolvimento de Aplicações – um kit de ferramentas – para as pessoas que constroem sites usando PHP. Seu objetivo é dar a você a possibilidade de desenvolver projetos muitos mais rapidamente do que você podia se estivesse escrevendo o código do zero, provendo de um rico conjunto de bibliotecas para tarefas comuns, com uma interface e estrutura lógica simples de acessos àquelas bibliotecas. Code Igniter permite que você mantenha o foco em seu projeto minimizando a quantidade de código necessário para uma dada tarefa.

CakePHP:

CakePHP é um framework escrito em PHP que tem como principais objetivos oferecer uma estrutura que possibilite aos programadores de PHP de todos os níveis desenvolverem aplicações robustas rapidamente, sem perder flexibilidade.

O CakePHP utiliza padrões de projeto conhecidos, tais como ActiveRecord, Association Data Mapping, Front Controller e MVC (Model-View-Controller).

Kohanna:

Kohana é um framework para aplicações web de código aberto, escrito em PHP 5 que adota o padrão MVC. Tem por objetivo ser seguro, leve e fácil de aprender e usar. Ele suporta apenas a versão 5 ou superior do PHP, a fim de fazer pleno uso das melhorias da orientação a objetos dessa versão.

Symfony:

Symfony é um framework web escrito em PHP que segue o paradigma MVC (model-view-controller). Disponível sob a Licença MIT, Symfony é um Software livre.

Yii:

Yii é um framework de alta performance em PHP que utiliza componentes para o desenvolvimento de pequenas/médias/grandes aplicações Web. Permite máxima reutilização de códigos na programação Web e pode acelerar significativamente o processo de desenvolvimento.

Zend:

Zend Framework é um framework para aplicações Web de código aberto, orientado a objetos, implementado em PHP 5 e licenciado como New BSD License. Zend Framework—freqüentemente referido como ZF—é desenvolvido com o objetivo de simplificar o desenvolvimento web enquanto promove as melhores práticas na comunidade de desenvolvedores PHP.

No link http://www.phpframeworks.com/ existe uma tabela de comparação entre os frameworks citados acima, assim como outros que são menos conhecidos. Não há como dizer qual deles é o melhor framework. O desenvolvedor deve escolher qual ele consegue se adaptar e melhor adequar à necessidade.