Codeigniter,

Codeigniter: Profiler permanente mediante hooks

Una de las opciones interesantes de un framework son sus posibilidades de depuración y medición de carga. Y Una de las tareas mas aburridas es la llamada repetitiva al ‘profiler’ de Codeigniter dentro del constructor o de cada método de la clase. Para resolver esta tarea vamos a emplear los hooks de Codeigniter.

En mi anterior post escribí en inglés (ésto lo hago según me parezca) sobre la integración de Google Data Services, librería de Zend, en Codeigniter. No era más que el uso y configuración de uno de estos hooks.

Profundicemos en el modo de usar este mecanismo, según el manual, podemos configurar los hooks para:

pre_system
Llamada temprana del hook. Tan solo se habrá cargado el sistema benchmark y la clase hook.

pre_controller
Llamada inmediatamente anterior a la carga de cualquier controlador excepto todas las clases base, rutas y rutinas de chequeo de seguridad.

post_controller_constructor
Ocurre despues de instanciar tu controller, concretamente en el constructor.

post_controller

Ocurre cuando se carga completamente el controlador.

display_override
Sobrecarga la función _display() usada para que se envíe la página al navegador. Te permite crear tu propia metodología de renderizado. Eso sí, deberas asignar por referencia el superobjeto CI para tener disponible $this->CI->output->get_output(), asi: $this->CI =& get_instance().

cache_override
Lo mismo que lo anterior, pero para la cache.

scaffolding_override
Para el sistema de scaffolding, sobreescritura que permite lanzar tu propia metodología.

post_system

Llamada despues de que todo ocurra.

Bien, despues de la explicación, al tajo. Abrimos el hook.php del config y definidos que tipo de hook queremos usar así como sus elementos en el array:

/* este hook nos permite cargar el profiler en cualquier clase a traves de profiler.php*/

$hook['post_controller_constructor'][] = array(
'class' => 'Profiler_hook',
'function' => 'profiler_hook',
'filename' => 'profiler.php',
'filepath' => 'hooks',
//'params' => array('')
);

Despues creamos el mencionado profiler.php dentro del directorio hooks, de ésta manera:

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

class Profiler_hook {
/*
* @params: ninguno
* @author: you
* @return void
* description:
* Permite la carga del profiler despues de que se cargue
* cualquier controlador a través de la configuración de hooks.
* Sólo se cargará en entornos de desarrollo mediante la BASE_URL_HOOK_PROFILER
* definida como constante.
*
*/

function profiler_hook() {
$CI = & get_instance();
// cargamos el profiler sólo para entornos locales.
if ($CI->config->item('base_url') == BASE_URL_HOOK_PROFILER) {
$CI->output->enable_profiler(TRUE);
} else {

}
}

}

Habreis notado que compruebo si estoy en desarrollo o produccion, mediante la constante BASE_URL_HOOK_PROFILER y su comparación con el item del config, supongo que hay mil maneras de hacer esto, pero ésta es uan de ellas.

Y Voilá, teneis disponible sólo para desarrollo el profiler del codeigniter, para nunca volver a repetir $CI->output->enable_profiler(TRUE);