> Manuales > Manual de CodeIgniter

Cómo reemplazar el código por completo de las librerías de CodeIgniter y cómo extenderlo con nuevas funcionalidades.

Ya llevamos varios artículos del Manual de CodeIgniter en los que estamos haciendo un segumiento exhaustivo sobre todas las posibilidades de creación de nuestras propias librerías personalizadas en este framework PHP. En artículos anteriores vimos muchas cosas sobre cómo crear nuestras propias librerías, pero en poco tiempo podremos encontrarnos con mayores necesidades.

Desarrolladores un poco más avanzados desearán en algún momento mejorar o cambiar algo en las librerías nativas de CodeIgniter. Esto es perfectamente posible en este framework PHP y para ello han puesto a nuestra disposición dos maneras de actuar:

Reemplazar el código de una librería con tu propia versión

En el momento de escribir este artículo en CodeIgniter podemos reemplazar el código de cualquier librería excepto la de trabajo con bases de datos "Database". Esto lo podemos hacer simplemente haciendo una librería que tenga el mismo nombre que la librería que pretendemos reemplazar.

La guardaremos en el directorio de nuestras propias librerías: system/application/libraries y le damos el nombre de la librería que queremos sustituir. Por ejemplo, si queremos reemplazar la librería Calendar, guardaríamos nuestro archivo como "Calendar.php".

El nuevo código de la librería sería el que nosotros queramos, sólo tenemos que respetar el nombre de la librería original:

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

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

   function algo(){
      //lo que sea...
   }
}

Nota: Fíjate que la mayoría de librerías nativas de CodeIgniter tienen el prefijo "CI_". Este prefijo sólo lo tienes que utilizar en el nombre de la clase.

Ahora, cuando carguemos la librería nativa Calendar en realidad se estará cargando el código que hemos definido nosotros en esa nueva clase.

$this->load->library('calendar');
$this->calendar->algo();
//$this->calendar->generate(); daría error, pues ya no existe ese método.

Extender las librerías nativas de CodeIgniter

Ahora vamos a ver un caso si cabe más probable. Imagina que quieras quieras que permanezca la funcionalidad de una librería y agregarle un par de funciones. Para esto no necesitas reemplazar el código completo de esa librería, sino simplemente extenderla con algunas funciones propias que solventen tus necesidades particulares.

El proceso es bastante parecido al de reemplazar por completo el código de la librería, excepto por un par de cosas:

Este sería el código para extender la libería Calendar.

class MY_Calendar extends CI_Calendar {

}

Tendríamos que guardar ese archivo en el directorio de las librerías (system/application/libraries) y darle el nombre "MY_Calendar.php".

Nota: Un detalle importante es que, si necesitas redefinir el constructor de la clase, no debes olvidarte de hacer una llamada al construcción de la clase parent.
class MY_Calendar extends CI_Calendar {

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

La carga de la clase de la librería extendida se hace igual que para la librería original, sin utilizar el prefijo "MY_". A partir de entonces tendrás la clase original más las funciones con las que la has extendido.

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

Nota:El prefijo "MY_" que se utiliza por defecto para los nombres de clases nativas de CodeIgniter que extendemos se puede configurar en el archivo system/application/config/config.php. Para ello simplemente tienes que editar la variable de configuración $config['subclass_prefix'].

Con esto ya hemos aprendido todo lo que debíamos conocer acerca de crear tus librerías con CodeIgniter y extender o reemplazar las existentes. Más adelante conoceremos cómo extender o reemplazar las clases del núcleo de CodeIgniter, como pueden ser Controller, Config...

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual