Code Igniter Versão 1.5.2 - Guia do Usuário


Criando Bibliotecas

Quando utilizamos o termo "Bibliotecas", normalmente estamos nos referindo as clases localizadas no diretório libraries e descritas na seção Referências de Classes deste guia. Neste caso, porém, iremos mostrar como você pode criar suas próprias bibliotecas dentro de seu diretório application/libraries a fim de manter uma separação entre seus recursos locais e os recursos globais do framework.

Como bônus, o Code Igniter permite que suas bilbliotecas estender classes nativas se você simplismente precisar adicionar alguma funcionalidade para uma biblioteca existente. Você ainda pode sobrescrever as bibliotecas nativas pelas suas em seu diretório application/libraries.

Sumário:

O texto abaixo detalha estes três conceitos.

Note: As classes de Banco de Dados e as classes Controller principais não podem ser estendidas ou sobrescritas pelas classes que você criar. Mas todas as outras podem.

Armazenamento

Sua biblioteca de classes deve ser colocada em seu diretório application/libraries, pois este será o lugar onde o Code Igniter irá procurá-las quando foram inicializadas.

Convenções de Nomenclatura

O arquivo de Classe

Classes devem ter este protótipo básico (Note: Estamos utilizando o nome Algumaclasse puramente como exemplo):

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Algumaclasse {

    function some_function()
    {
    }
}

?>

Utilizando sua classe

De dentro de qualquer função Controller você pode inicializar suas classes utilizando o padrão:

$this->load->library('Algumaclasse');

Onde Algumaclasse é o nome do arquivo, sem a extensão ".php". Você pode dar submit no nome do arquivo como inicial maiúscula ou minúscula. O Code Igniter não se importa.

Uma vez carregada, você pode acessar sua classe utilizando a versão em caixa baixa:

$this->Algumaclasse->some_function();  // Instâncias de Objeto serão sempre em caixa baixa

Passando parâmetros ao inicializar sua classe

Em sua função de carregamento da biblioteca, você pode passar dados dinamicamente, através do segundo parâmetro, para seu construtor de classes:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('dinamicamente', $params);

Se você usar este recurso deve obrigatoriamente configurar seu construtor para esperar o dado:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Algumaclasse {

    function Algumaclasse($params)
    {
        // Faça alguma coisa com o $params
    }
}

?>

Você pode também passar parâmetros armazenados no arquivo de configuração. Simplesmente crie um arquivo config com nome idêntico ao do nome de arquivo da classe e salve-o em seu diretórioapplication/config/. Note que se você passar dinamicamente parâmetros, como descrito acima, a opção do arqivo config não estará disponível.

Utilizando os Recursos do Code Igniter dentro de sua Biblioteca

Para acessar os recursos nativos do Code Igniter dentro de sua biblioteca use a função get_instance(). Esta função retorna o super objeto Code Igniter.

Normalmente dentro de suas funções controller você poderá chamar qualquer função disponível no CI usando o construtor $this:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
etc.

$this, porém, apenas trabalha diretamente dentro de seus controllers, models ou views. Se você quiser usar as classes do Code Igniter dentro de suas próprias funções personalizadas, pode fazer da sequinte forma:

Primeiro, atribua o objeto Code Igniter a uma variável:

$CI =& get_instance();

Uma vez feito isto, você irá usar esta variável no lugar de $this:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
etc.

Note: Você irá notar que a função get_instance() acima está sendo passada por referência:

$CI =& get_instance();

Isto é muito importante. Atribuir por referência permite que você use o objeto Code Igniter original, ao invés de criar uma cópia dele.

Sobrescrevendo Bibliotecas Nativas por suas Próprias Versões

Simplesmente nomear seus aquivos de classe de forma idêntica à uma biblioteca nativa irá forçar o Code Igniter a usar aquele no lugar do nativo. Para usar este recurso você deve nomear o arquivo e a declaração da classe com o mesmo nome da biblioteca nativa. Por exemplo, para sobrescrever a biblioteca nativa Email crie um arquivo chamado application/libraries/Email.php, e declare sua variável como:

class CI_Email {

}

Note que a maioria das classes nativas contém o prefixo CI_.

Para carregar sua biblioteca use a função padrão:

$this->load->library('email');

Note: Até este momento as classes de Banco de Dados não podem ser sobrescritas pelas versões que você criar.

Estendendo Bibliotecas Nativas

Se tudo o que precisa é adicionar uma certa funcionalidade à uma biblioteca existente - talvez uma ou duas funções - então é desnecessário substituir a biblioteca inteira com sua versão. Neste caso, é melhor simplismente estender a classe. Estender uma classe é praticamente igual a substituí-la, com algumas exceções:

Por exemplo, para estender a classe Email nativa, você precisa criar um arquivo chamado application/libraries/MY_Email.php, e declarar sua classe com:

class MY_Email extends CI_Email {

}

Note: Se você precdisar usar um construtor em sua classe, tenha certeza de estender o construtor pai:

class MY_Email extends CI_Email {

    function My_Email()
    {
        parent::CI_Email();
    }
}

Carregando sua Subclasse

Para carregar sua subclasse você irá usar a sintaze padrão normalmente utilizada. NÂO INCLUA seu prefixo. Por exemplo, para carregar o exemplo acima, que estende a classe Email, use:

$this->load->library('email');

Uma vez carregada, você irá usar a variável classe da mesma forma que usaria para a classe que irá estender. No caso da classe email, todas as chamadas irão usar: $this->email->alguma_função();

Configurando seu próprio Prefixo

Para configurar seu próprio prefixo de subclasse, abra seu arquivo application/config/config.php e procure este item:

$config['subclass_prefix'] = 'MY_';

Por favor, note que todas as bibliotecas nativas do Code Igniter têm o prefixo CI_ então NÂO USE isto como seu prefixo.