Cómo podemos modificar las clases que forman el núcleo de CodeIgniter para alterar significativamente la manera de funcionar del framework PHP.
Cuando se pone en marcha CodeIgniter existen varias clases que se cargan automáticamente como núcleo de proceso del framework. Esas clases son las que se denominan habitualmente el Core de CodeIgniter y nosotros podemos intercambiarlas por nuestros propios códigos, o lo que realmente sería más común, extenderlas con código adicional que realice funciones que resulten críticas en nuestras aplicaciones web.
En este artículo del Manual de CodeIgniter mostraremos el modo de modificar el Core de CodeIgniter, para las personas que juzguen que puede ayudarles en sus tareas de desarrollo.
En la práctica, la mayoría de los usuarios no van a necesitar nunca alterar las clases del Core. Si acaso en algunos casos puede resultar interesante extender alguna de las clases con código adicional, para dotarles de algún método que resulte útil en determinadas aplicaciones. Del mismo modo, antes de cambiar nada del Core de CodeIgniter, es importante que el desarrollador sepa lo que está haciendo y sepa por qué lo está haciendo, aparte que tenga cierta experiencia que le ayude a no meter la pata con las clases más fundamentales de este framework.
Listado de clases del Core de CodeIgniter
Cuando nos referimos al Core de CodeIgniter, hacemos referencia de aquellas clases que son cargadas siempre que el framework se pone en funcionamiento. Son las siguientes:
- Benchmark
- Config
- Controller
- Exceptions
- Hooks
- Input
- Language
- Loader
- Log
- Output
- Router
- URI
Reemplazar las clases del core con nuestras propias versiones
La primera posibilidad que existe es sustituir completamente una clase del Core por otra creada enteramente por nosotros. Esta tarea en principio resulta poco aconsejable y además requeriría un nivel mucho mayor del desarrollador que está realizándola, porque estaremos eliminando una clase clave del framework y colocando un código nuestro, que tenemos que asegurarnos que funcione y que realiza las tareas para las que está diseñada la clase originalmente. En cualquier caso se realiza de la siguiente manera:Primero tenemos que fijarnos en el nombre de la clase que queremos sustituir, que puede ser cualquiera de las listadas antes. Luego tenemos que crear una clase con el mismo nombre y colocarla en el directorio de "system/application/libraries".
Por ejemplo, imaginemos que queremos sustituir la clase "Config". Entonces crearíamos un archivo en:
system/application/libraries/Config.php
Luego, el código a insertar en ese archivo sería el necesario para definir la clase que estamos sustituyendo, teniendo en cuenta que el nombre de la clase a sustituir debe tener el prefijo CI_. Veamos el siguiente esquema:
class CI_Config {
//Código de nuestra nueva clase Config
}
Extender el código de una clase del Core
Esta segunda posibilidad resulta bastante más interesante, al menos para usuarios más normales, puesto que permite agregar funcionalidad a las clases existentes en el Core de CodeIgniter, sin alterar las cosas que ya hacen originalmente.
Extender una clase se hace de manera similar a sustituirla, con la diferencia que al extenderla tenemos que asegurarnos de invocar al constructor de la clase "parent" (clase que estamos extendiendo) y que debemos utilizar un prefijo "MY_" tanto en el nombre del archivo como en el de la clase.
Así pues, veamos cómo podemos extender, por ejemplo, la clase Controller.
Tendremos que crear un archivo llamado MY_Controller.php que situaremos en la ruta system/application/libraries/MY_Controller.php. Su código sería el siguiente:
<?php if (!defined('BASEPATH')) exit('No deseo permitir acceso directo a este script');
class MY_Controller extends Controller {
//constructor, debe llamar al constructor de la clase parent
function MY_Controller(){
parent::Controller();
}
function algo_importante_que_deseo_tener_siempre(){
//código de una función con la que estoy extendiendo mis controladores
}
}
Como se puede ver, estamos extendiendo la clase Controller y lo más importante es fijarse cómo en el constructor hemos hecho una llamada al constructor de la clase "parent", para que no se pierdan las tareas de inicialización de los objetos que se definieron en las clases del core que estamos extendiendo.
Luego, nuestros métodos tendrán cualquier nombre que deseemos. Además, si queremos sustituir específicamente alguno de los métodos que existían en la clase original, simplemente tenemos que crear un nuevo método con el mismo nombre que tenía antes. Por ejemplo, si creamos un método llamado index() en la clase MY_Controller, estaremos sustituyendo el código de ese método de los controladores originales.
$config['subclass_prefix'] = 'MY_';
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...