terça-feira, 2 de junho de 2009

Criando helpers que carregam bibliotecas do codeigniter

Olá pessoal! Só passando aqui para dar uma dica bem legal do codeigniter.
No ci você pode criar arquivos com funções php que você chama de helpers, estas funções podem ser usadas no controller, views e models (de acordo com o padrão MVC as views não seriam um bom lugar para se chamar um helper já que lá não é lugar de lógica de aplicação).
O problema é que originalmente estes helpers não possuem uma forma fácil e transparente para acessar as funções do ci (como funções das classes bd, session, config etc.). Mas através do método get_instance() esta tarefa fica bem simples.
Para se criar um helper não tem segredo: dentro da pasta application de sua aplicação ci tem uma pasta chamada helpers. Dentro dela você pode criar um arquivo chamado login_helper.php por exemplo. Dentro dele podemos colocar o seguinte conteúdo dentro das tags php:

function logout_usuario() {
$ci = & get_instance();
$ci->load->library('session');
$ci->session->unset_userdata('usuario_logado');
}

Através do comando get_instance eu consigo acessar uma instância do objeto global do ci. Com este objeto tenho acesso as classes, bibliotecas e outros helpers existentes, podendo assim usá-los nos meus próprios helpers. Se quiséssemos usar a biblioteca de encriptação por exemplo bastaria fazer o seguinte:

$ci = & get_instance();
$ci->load->library('encrypt');
$ci->encrypt->encode('valor secreto', 'chave do valor secreto');

Usamos o operador & junto ao comando get_instance() para pegar uma referência direta ao objeto global do ci, assim evitando uma cópia do objeto em memória.
Para você acessar seu helper basta fazer isso no controlador por exemplo:

$this->load->helper('login');
logout_usuario();

Note que ao carregar o helper ignoramos o "_helper.php" do nome do arquivo.

A dica está dada, até a próxima!