Substituir e estender bibliotecas de CodeIgniter

Como substituir o código por completo das bibliotecas de CodeIgniter e como estendê-lo com novas funcionalidades.

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


Publicado em: 22/8/12
Valorize este artigo:
Já há vários artigos do Manual de CodeIgniter nos que estamos fazendo um rastreio exaustivo sobre todas as possibilidades de criação de nossas próprias bibliotecas personalizadas neste framework PHP. Em artigos anteriores vimos muitas coisas sobre como criar nossas próprias bibliotecas, mas dentro de pouco tempo poderemos nos deparar com maiores necessidades.

Desenvolvedores um pouco mais avançados vão desejar em algum momento melhorar ou mudar algo nas bibliotecas nativas de CodeIgniter. Isto é perfeitamente possível neste framework PHP e para isso foram postas à nossa disposição duas maneiras de atuar:

  • Substituir código de uma biblioteca nativa por outro totalmente novo
  • Estender o código de uma biblioteca nativa

Substituir o código de uma biblioteca com sua própria versão

No momento de escrever este artigo em CodeIgniter podemos substituir o código de qualquer biblioteca exceto a de trabalho com bases de dados "Database". Isto pode ser feito simplesmente fazendo uma biblioteca que tenha o mesmo nome da biblioteca que pretendemos substituir.

Vamos salvá-lo no diretório de nossas próprias bibliotecas: system/application/libraries e lhe damos o nome da biblioteca que queremos substituir. Por exemplo, se queremos substituir a biblioteca Calendar, salvaríamos nosso arquivo como "Calendar.php".

O novo código da biblioteca será o que nós quisermos, só temos que respeitar o nome da biblioteca original:

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

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

   function algo(){
      //qualquer coisa...
   }
}

Nota: Observe que a maioria de bibliotecas nativas de CodeIgniter têm o prefixo "CI_". Você só tem que utilizar este prefixo no nome da classe.

Agora, quando carreguemos a biblioteca nativa Calendar na realidade se estará carregando o código que definimos nessa nova classe.

$this->load->library('calendar');
$this->calendar->algo();
//$this->calendar->generate(); daria erro, pois já não existe esse método.

Estender as bibliotecas nativas de CodeIgniter

Agora vamos ver um caso se cabe mais provável. Imagine que você queira que permaneça a funcionalidade de uma biblioteca e adicionar-lhe duas funções. Para isto você não necessita substituir o código completo dessa biblioteca, mas simplesmente estendê-la com algumas funções próprias que solucionem suas necessidades particulares.

O processo é bastante parecido ao de substituir por completo o código da biblioteca, exceto por duas coisas:

  • A declaração da nova classe deve estender a classe original
  • Sua nova classe deve ter o prefixo "MY_" (embora isto possa ser configurado)

Este seria o código para estender a biblioteca Calendar.

class MY_Calendar extends CI_Calendar {

}

Teríamos que salvar esse arquivo no diretório das bibliotecas (system/application/libraries) e lhe dar o nome "MY_Calendar.php".

Nota: Um detalhe importante é que, se você necessita redefinir o construtor da classe, não deve esquecer de fazer uma chamada ao construção da classe parent.
class MY_Calendar extends CI_Calendar {

   function My_Calendar(){
      parent::CI_Calendar();
   }
}

O carregamento da classe da biblioteca estendida é feita do mesmo jeito que para a biblioteca original, sem utilizar o prefixo "MY_". A partir de então você terá a classe original mais as funções com as que você a estendeu.

$this->load->library('calendar');
$this->calendar->minhafuncao_estendida();

Nota:O prefixo "MY_" que se utiliza por padrão para os nomes de classes nativas de CodeIgniter que estendemos, se pode configurar no arquivo system/application/config/config.php. Para isso você só tem que editar a variável de configuração $config['subclass_prefix'].

Com isto já aprendemos tudo que devíamos conhecer sobre criar suas próprias bibliotecas com CodeIgniter e estender ou substituir as existentes. Mais adiante conheceremos como estender ou substituir as classes do núcleo de CodeIgniter, como podem ser Controller, Config...






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

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