Acessar recursos de CodeIgniter a partir de suas próprias bibliotecas

Vejamos como acessar os recursos do framework PHP CodeIgniter, a partir do código das bibliotecas criadas por você mesmo.

Por Miguel Angel Alvarez - Tradução de Celeste Veiga


Publicado em: 06/8/12
Valorize este artigo:
Agora que já sabemos um pouco sobre como criar nossas próprias bibliotecas em CodeIgniter, vamos comentar como se acessa, a partir de seu código, os recursos nativos de CodeIgniter. Quando nos referimos aos recursos de CodeIgniter pode ser qualquer coisa que dependa do framework, como as visões, modelos ou outras bibliotecas, só para dar alguns exemplos.

Se você está lendo o Manual de CodeIgniter que estamos publicando em CriarWeb.com, talvez não entenda de cara para que você pode necessitar desses recursos, mas à medida que você se proponha fazer coisas mais ou menos interessantes em suas bibliotecas verá que precisa invocar recursos dependentes de outros componentes de sua aplicação web. Para esclarecer este ponto, na parte final deste artigo mostraremos um exemplo de biblioteca que utiliza um modelo, para acesso à base de dados a partir da própria biblioteca.

Obter a instância de CodeIgniter com get_instance()

A função get_instance() serve para acessar uma instancia do superobjeto CodeIgniter, com a que poderemos recuperar ou usar todos os recursos nativos de CodeIgniter.

Para termos uma ideia, em nossos controladores acessamos os recursos de CodeIgniter por meio da variável $this, com a que fazemos coisas como as seguintes:

$this->load->helper('array');
$this->load->library('Minhabiblioteca');
$this->config->item('base_url');

A partir dos controladores, visões ou modelos podemos acessar essa variável $this sem problemas, mas se estamos definindo nossas bibliotecas, ou outras classes que vamos utilizar em CodeIgniter, a variável $this não servirá para acessar CodeIgniter. Nesse caso devemos utilizar este modelo de código para obter a instancia do framework.

Situamos CodeIgniter dentro de uma variável com get_instance().

$CI =& get_instance();

Agora acessamos os métodos do superobjeto CodeIgniter por meio dessa variável.

$CI->load->helper('array');
$CI->load->library('Minhabiblioteca');
$CI->config->item('base_url');

Nota: Você terá observado o caractere "&" ao recuperar a instancia do superobjeto CodeIgniter. Isto é feito para que se passe por referencia o objeto, assim você poderá usar o objeto CodeIgniter original em vez de utilizar uma copia do mesmo. É importante este detalhe.

Para os usuários de PHP 4: Em entornos onde ainda se trabalhe com PHP 4 temos que ter em conta a seguinte recomendação que podemos encontrar na guia de uso de CodeIgniter. Por favor, não crie instancias de CodeIgniter com get_instance() a partir dos construtores das classes, porque pode dar problemas. Isto porque PHP 4 tem um problema ao obter referencias ao objeto CodeIgniter em construtores, pois os objetos não existem antes de que a classe seja totalmente instanciada.

Exemplo de biblioteca que faz uso de recursos de CodeIgniter

Vejamos agora um exemplo com o que garantir nossos conhecimentos. Simplesmente vamos mostrar o código de uma biblioteca que tem uma função em que se acessa a base de dados. Como em CodeIgniter o acesso à base de dados se centraliza nos modelos, teremos que acessar recursos de CodeIgniter a partir da biblioteca.

Tirei este código de um dos exemplos de CodeIgniter que veremos mais adiante em CriarWeb.com. Talvez agora não faça muito sentido porque não conhecemos o modelo que estamos invocando, mas serve para termos uma ideia.

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

class Validador{
   protected $ci;
   
   function __construct(){
      $this->ci =& get_instance();
   }

   //comprova se um email está repetido
   function ha_email_repetido($str){
      $this->ci->load->model('usuario_model');
      if ($this->ci->Usuario_model->existe_email($str))
      {
         return TRUE;
      }
      else
      {
         return FALSE;
      }
   }
}

No código anterior se definiu uma propriedade na classe $ci. Depois, no construtor ,colocamos a instancia do superobjeto CodeIgniter nessa propriedade.

Nota: O modelo de construtor que utilizamos no código anterior é de PHP 5. Ademais, lembrem que chamar no construtor get_instance() dá problemas em PHP 4. De modo que deveríamos colocar no código da função a chamada a get_instance() .

Na função ha_email_repetido() se acessa a propriedade $ci através de $this->ci, onde temos a instancia de CodeIgniter. Através dela podemos acessar a carga de modelos e a invocação de alguma das funções do modelo.

No próximo artigo mostraremos como se podem estender as bibliotecas nativas de CodeIgniter e como podemos substituí-las totalmente por outro código diferente.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato