FirePHP para cakePHP

 

cakePhp

Primero decir que firePHP es complemento  de firebug para firefox, ¿en que nos facilita la vida? nos ahorra tener que sacar por pantalla echos, o var_dump(), esto es extremadamente útil cuando un proyecto web en php ya está en subido, y hay usuarios conectados.

Pasos a seguir para poder utilizar firePHP en Cakephp:
He sacado la parte de como instalarlo de: http://www.utoxin.name/2009/02/cakephp-firephp/.

Requerimientos:

Vamos a preparar cakePHP para el correcto funcionamiento de firePHP.

Lo primero que debemos haces es descomprimir la biblioteca principal de firePHP que hemos descargado, dentro de la carpeta lib, copiar la carpeta FirePHPCore, en “app/vendors/”.

Copiamos el archivo dbo_source.php de “cake/lib/models/datasources” y lo pegamos en “app/models/datasources/”, buscamos dentro del archivo la función showLog() y la cambiamos por la siguiente.

function showLog($sorted = false) {
	if ($sorted) {
		$log = sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC);
	} else {
		$log = $this->_queriesLog;
	}
 
	if ($this->_queriesCnt > 1) {
		$text = 'queries';
	} else {
		$text = 'query';
	}
 
	if (PHP_SAPI != 'cli') {
		$summary = "{$this->_queriesCnt} {$text} took {$this->_queriesTime} ms";
 
		$body = array();
		$body[] = array("Nr", "Query", "Error", "Affected", "Num. rows", "Took (ms)");
		foreach ($log as $k => $i) {
			$body[] = array(($k + 1), $i['query'], $i['error'], $i['affected'], $i['numRows'], $i['took']);
		}
 
		fb(array($summary, $body), FirePHP::TABLE);
	} else {
		foreach ($log as $k => $i) {
			print (($k + 1) . ". {$i['query']} {$i['error']}\n");
		}
	}
}

Ahora debemos pegar el siguiente código en “app/config/bootstrap.php”.

App :: import ( 'Vendor' , 'FirePHP' , array ( 'file' => 'FirePHPCore/FirePHP.class.php' )); 
function fb() {
	$debug = Configure::read('debug');
	if ($debug) {
		$ob_setting = ini_get('output_buffering');
		if (!$ob_setting) {
			ob_start();
		}
 
		$instance = FirePHP::getInstance(true);
		$args = func_get_args();
		return call_user_func_array(array($instance, 'fb'), $args);
	} else {
		return true;
	}
}

Ahora crearemos un componente para poderlo utilizar en todos nuestros controladores, app/controllers/components/fire_p_h_p.php y copiamos el siguiente código:

class FirePHPComponent {
	private $instance;
 
	public function __construct() {
		$ob_setting = ini_get('output_buffering');
		if (!$ob_setting) {
			ob_start();
		}
		$this->instance = FirePHP::getInstance(true);
		$this->instance->setEnabled(Configure::read('debug'));
	}
 
	public function __call($name, $args) {
		return call_user_func_array(array($this->instance, $name), $args);
	}
}

Ya estaría instalado, vamos a probarlo, primero deberiamos llamar al componente en el controlador donde queramos usarlo.

var $components = array('FirePHP');

También dejo una pequeña idea de como usarlo en el controlador.

public function index() {
                $users = $this->Users->AllUsers();
		$this->FirePHP->error($users,'array users');
	}

Estamos simulado que recogemos todos los usuarios de la base de datos en una variable $users, la salida será un array, como habíamos comentado, la idea era no tener que poner var_dump o echos. Ahora en pantalla no nos saldrá nada, pero si vamos a la consola de firebug, vermos ahí nuestra array reflejada con el nombre de error array users.