Sigueme en Twitter

Archivo de artículos en la categoría "CakePHP"

Ir al inicio

Bundle de CakePHP para Textmate

24/02/2009

Si utilizas el buen Textmate y CakePHP, te agradará utilizar bundles (auto-completar, snippets) específicos para este framework.

Matthew Harris inicio este proyecto y sigue siendo actualizados por otros usuarios. Todo lo que tienes que hacer es bajarlo con subversion.

cd ~/Library/Application\ Support/TextMate/Bundles
$ svn co http://macromates.com/svn/Bundles/trunk/Review/Bundles/PHP\ Cake.tmbundle

Si no existe la carpeta de Bundles anteriormente, solo créala. Reinicias Textmate y listo.

Los snippets son de dioses

9 Comentarios

Depura código de PHP con Komodo IDE y Xdebug

2/01/2009

Tengo cerca de dos años utilizando Komodo Edit, la versión libre de Komodo IDE, para programar aplicaciones web y estoy bastante feliz con el. Cubre mis necesidades mínimas como tener un buen coloreado de código, autocompletado, marcadores, snippets y ser agradable a la vista.

Ahora (gracias a Hunk) comencé a utilizar Komodo IDE 5 que tiene muchas características importantes (en serio, muchas), pero entre ellas destaca la posibilidad de integrar un depurador completo (breakpoints, watchers, etc) que se integra perfectamente con Xdebug.

Otras opciones

Esto no es nada nuevo claro, he probado otras opciones como Vim + Xdebug, PDT (Eclipse). Con Vim la integración no se siente natural y ademas el nerd dentro de mi no es suficientemente bueno para recordar shortcuts que no utilizo continuamente.

PDT no me gusta porque esta basado en Eclipse, contra el que no tengo nada en contra, pero es demasiado generalista y Java nunca se ha distinguido por su ligereza. Zend Studio es el IDE oficial de los creadores de PHP, pero con el puro precio no quiero ni mirarlo, no lo he probado en años y ahora parece que se mudaron también a Eclipse.

¿Como funciona?

La cosa es así: Xdebug es una extensión de PHP que le da la habilidad de proveer muchos mas datos para depuración, esta extensión (por medio de «depuración por remoto») se comunicará directamente con Komodo, quien crea un proceso que espera por datos todo el tiempo.

Tu puedes usar tu aplicación en tu navegador favorito y Komodo sabrá cuando te has topado con un breakpoint, inmediatamente iniciará una sesión de depuración y avisará por ello.

Configurando Komodo IDE con Xdebug

Configurar es muy sencillo (en cualquier sistema operativo), si tienes Ubuntu la instalación de Xdebug es una simple linea.

sudo aptitude install php5-xdebug

Ubuntu habrá creado un archivo de configuración solo para Xdebug en la ruta /etc/php5/apache2/conf.d/xdebug.ini (si tu sistema operativo no separa las configuraciones lo meterás directo al php.ini), que sera cargado la próxima vez que reinicies tu servidor web.

En este archivo vamos a habilitar depuración por remoto agregando los siguientes parámetros:

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000

Existe un parámetro llamado xdebug.idekey al que debes de poner atención si varias personas comparten el mismo servidor web. El parámetro zend_extension Ubuntu ya lo debió haber agregado.

El parámetro xdebug.remote_port manda los datos por dicho puerto a tu IDE. Para decirle a Komodo que utilice ese puerto tienes que ir a «Preferences -> Debugger -> Connection» y agregarlo manualmente. Asegúrate de aprobar también la opción de «Debug -> Listen for Debugging Connections» para que levante el proceso que espere por datos.

Reinicia tu servidor web para que cargue la configuración de Xdebug y listo.

¡A probarlo!

Para probar solo tienes que agregar este parámetro en la URL:

?XDEBUG_SESSION_START=1

Aquí por ejemplo coloque un breakpoint en una aplicación hecha con CakePHP (que tiene bastantes capas tan solo contando el framework) y al probar con Firefox, Komodo abrió automáticamente la sesión de debuggeo.

URL con el parametro adicional

Komodo depurando

Tremendo no tener que depender de imprimir a pantalla suciamente cuando se necesita depurar algo complicado :-)

8 Comentarios

CakePHP 1.2 lanzado

26/12/2008

Después de no se cuantos meses de desarrollo hace unas horas CakePHP 1.2 llego a su fase estable, descargalo antes de que se enfrie!

Sin Comentarios

Elements en Helpers de CakePHP

19/04/2008

Tanto como no se debe de usar un Model dentro de un Component, tampoco se debe de usar un Element dentro de un Helper, aun así, si tienes una situación especial donde debes de hacerlo, lo puedes lograr de la siguiente manera.

1
2
$vista = ClassRegistry::getObject('view');
$vista->renderElement('nombre_elemento');

CakePHP te pone las reglas (y para tu propia sanidad, deberías de seguirlas), pero no te limita a ellas.

Sin Comentarios

Dolores de cabeza con los espacios blancos

1/04/2008

En CakePHP, una situación muy común es que se te vaya una linea en blanco después de que has cerrado los tags de PHP en prácticamente cualquier archivo que este incluido en el framework, ya sea un helper, view, controller, component.. lo que sea.

Normalmente esto no trae problemas, pero cuando necesitas que lo que imprimes en pantalla sea absolutamente lo primero, como las declaraciones de un feed XML o un header para imprimir una imagen, si que afecta y es un dolor de cabeza buscar de archivo por archivo donde esta el espacio en blanco si tu proyecto a crecido demasiado.

Por ahi en la lista de cake, alguien público una expresión regular con sed que recursivamente busca por cualquier archivo de PHP con lineas vacías al final y las elimina:

find -name “*.php” | xargs sed -i -e :a -e ‘/^\n*$/{$d;N;ba’ -e ‘}’

Recomendaría que solo la utilizaras si tu código esta en un repositorio, para que te des cuenta de cuales archivos a modificado y donde exactamente.

4 Comentarios

Usando funciones de MySQL en CakePHP

11/03/2008

Algo que me atraso en la madrugada era que CakePHP escapa todas las condicionales que le mandas en una consulta SQL, y si la condicional de casualidad esta formada con una funcion de MySQL, esta obviamente no se ejecuta.

Por ejemplo, esto no funcionara: (busca que el campo created sea mas reciente que hace 1 día)

1
2
3
4
5
$conditions = array
    (
        "created" => "> date_sub( curdate(), interval 1 day)"
    );
$this->Model->findAll( $conditions, null, "depart_date ASC");

Para evitar esto CakePHP implementa un operador mágico “-!” que le indica no escapar esa sentencia y nuestra consulta se ejecute como pretendemos.

1
2
3
4
5
$conditions = array
    (
        "created" => "> -!date_sub( curdate(), interval 1 day)"
    );
$this->Model->findAll( $conditions, null, "depart_date ASC");

Voilà!

3 Comentarios

Helpers dentro de controllers en CakePHP

9/08/2007

Esto es cochino, sucio y hay 99% de posibilidad de que si necesitas hacer esto, estes en un error de conceptos y lo que intentes hacer se pueda hacer mejor de otra forma.

Los Helpers fueron pensados para ser usados dentro de las Vistas. Punto.

Aún asi no deja de ser interesante el saber como utilizarlos dentro de un Controller, quien sabe, talvez algún día te saque de algún apuro.

1
2
3
4
5
6
7
class UsersController extends AppController {
    function index() {
        loadHelper('Html');
        $html = new HtmlHelper();
        debug($html->link('Un buen link', 'http://cakephp.org'));
    }
}

Vía | CakeBaker

6 Comentarios

El Ciclo de Vida en CakePHP

15/06/2007

Brandon Parise, creó un diagrama donde podemos apreciar el ciclo de vida del script al hacer una petición a CakePHP. (clic en la imagén para verlo completo)

Ciclo de Vida en CakePHP

En la página de Brandon se ira actualizando el diagrama.

Vía | Cakebaker

Sin Comentarios

Componente de JSON en CakePHP

28/05/2007

Un componente muy útil desarrollado Eelco Wiersma en base al paquete de PEAR Service_JSON.

Su uso es muy simple, agregar el componente en tu controlador y esta listo para encoding y decoding en JSON.

1
2
3
4
5
6
7
8
var $components = array('json');
 
$valor = array('uno', 'dos', 'tres', array('arreglo', 'multiple'));
//convertimos el arreglo a json y lo guardamos en $resultado
$resultado = $this->json->encode($valor);
 
//ahora al revez.. lo pasamos de json a un objeto
$resultado = $this->json->decode($resultado);

Bajalo en CakeForge

Actualización

Las funciones de JSON también estan disponibles como extensiones de PECL para PHP y a partir de PHP 5.2 son incluidas en los binarios por default.

Sin Comentarios

Cual versión de CakePHP deberías de usar?

25/05/2007

Ahora que esta tan de ‘moda’ la utilización de frameworks para programar cualquier cosa, y siendo PHP tan usado, mas de alguno seguro se ha topado con CakePHP.

Desde hace algunos meses sucede una extraña situación con el proyecto; esta a punto de salir una nueva versión (1.2.x.x) que sustituira a la actual (1.1.x.x) haciendo varios cambios significativos en el funcionamiento del framework, el gran problema es que esta versión como bien puede salir en dias, tambien puede salir en semanas o hasta en meses.

Asi que si estas indeciso sobre que versión utilizar, aqui van unos pros y contras, cortesía de CakeBaker

CakePHP 1.1.x.x

Pros:

  • Estable
  • Documentación abundante con manuales y tutoriales

Contras:

  • No se sacan mejoras para esta versión, solo se corriguen bugs

CakePHP 1.2.x.x

Pros:

  • Muchas funcionalidades nuevas
  • El futuro de Cake

Contras:

  • Sin documentación (casi)
  • Es una versión Alpha, asi que puede cambiar y algunas funciones pueden no estar terminadas

En lo personal, pienso que es simple, los que ya tienen experiencia con Cake, deberían de usar la versión 1.2.x.x y no tendran ningún problema al adaptarse (y si lo tienen hay muchas personas a quien preguntarles en IRC o listas de correo).

Las personas que no lo conocen aún, deberían de usar la versión que esta documentada, que es la 1.1.x.x.

Una experiencia con un modelo del que estas aprendiendo y que no tiene documentación, puede ser frustrante.

Sin Comentarios