Después de más de dos años desarrollando aplicaciones web a la medida utilizando CakePHP queremos tomarnos un tiempo para recomendarlo. Sí, realmente es tan fácil como dicen, de ahí su nombre.
CakePHP es un framework creado para el desarrollo de aplicaciones web en PHP.
Un framework automatiza muchas de las tareas más comunes de un desarrollador, sin embargo, muchas veces la curva de aprendizaje que se requiere para poderle sacar máximo provecho es una limitante. La idea principal de Cake es acelerar el proceso de aprendizaje, a la vez que se reduzca el tiempo de desarrollo, manteniendo la calidad del código.
Cake utiliza el esquema Modelo-Vista-Controlador para estructurar sus proyectos. Esto reforzado con el paradigma de orientación a objetos permite el desarrollo de aplicaciones modularizables.
Veamos algunas de las cosas más interesantes que nos ofrece:
Scafolding
Al inicio de un proyecto es muy común que se ajusten detalles en cuanto a la información que va a guardar cada tabla de la base de datos. Debido a esto, los desarrolladores tienen que utilizar más tiempo re-adecuando las secciones del sitio que salvan o eliminan datos.
El Scafolding crea una estructura CRUD temporal con cuatro simples pasos: Cree la base de datos inicial, cree el modelo, cree el controlador en blanco y agregue la variable $scaffold. Cake se encarga de toda lo lógica interna y del despliegue de las opciones requeridas.
Una vez que la base de datos ha sido definida, el desarrollador puede reemplazar el scafold por sus propias vistas y métodos.
Bake
Cake incluye un pequeño pero poderoso script llamado “Bake” que nos permite “hornear” nuestra aplicación apartir de una base de datos simple. Bake puede crear tanto modelos, como vistas o controladores completamente funcionales, e incluso con scaffolding, sin que el desarrollador deba escribir una sola línea de código.
Validaciones Integradas
Los modelos de Cake reflejan las entidades y relaciones de la base de datos. Ademas, para cada campo de las tablas se pueden definir reglas de validación propias o utilizar las reglas predefinidas de Cake. En cada modificación o inserción de un registro, Cake validará todos los campos automaticamente (a menos que se indique lo contrario desde el controlador).
Entre las reglas de validación integradas de Cake están
- Formato de fechas predefinidos y customizados
- Tarjetas de crédito
- Ips
- Valores monetarios
- Teléfonos y zip codes
- SSN’s
- Urls
Consultas Anidadas
Para hacer una consulta a la base de datos en Cake no es necesario escribir ni una sola instrucción de base de datos. Mediante el método find, heredado en los modelos, se parametrizan las búsquedas de modo que simplemente se necesita crear un array con el detalle de la búsqueda.
En los modelos de Cake se definen las relaciones entre las distintas entidades de la base de datos. Gracias a esto, al hacer una consulta, Cake retorna los campos del registro asociado directamente a la busqueda, pero además puede incluir toda la información relacionada a dicho registro de la base de datos. Esta es una de las características que hacen más potente a Cake.
Por ejemplo, imaginemos que tenemos una galería web de imágenes. Además cada imagen tiene usuario que es su propietario y puede estar asociada a múltiples comentarios de otros usuarios. Tendríamos entonces una base de datos compuesta por la tabla imagenes, la tabla usuarios y la tabla comentarios. Al hacer una consulta de una imagen determinada en Cake, podríamos obtener un array con solamente los datos del registro de la imagen (utilizando el parámetro recursive en cero), o también los datos del registro junto con los datos del usuario propietario y los comentarios (recursive en 1), o inclusive toda esta información junto con la información de los usuarios que escribieron cada comentario y las imágenes que estos hayan también subido al sitio.
Saves Recursivos
Por supuesto, si se pueden hacer consultas recursivas también se puede guardar información de esta forma. Cake simplemente necesita que se envíe como parámetro al método saveAll un hash en el cuál las llaves sean los nombres de los modelos y el valor de cada entrada sea un array con los campos que se quieren salvar. Cake automáticamente guardará los registros y actualizará las llaves foráneas de todos los modelos involucrados según se especifique en los modelos.
Es importante destacar que, como explicamos anteriormente, Cake corre automáticamente las validaciones incluidas en los modelos al guardar información en la base de datos. Al hacer un save recursivo, Cake trabaja en modo transacción, es decir, valida todos los modélos involucrados y solamente si todos son válidos realiza la operación en la base de datos. Esto ayuda obviamente a evitar muchas inconsistencias y hace a Cake muy robusto.
Otras cosas interesantes
Como todo buen framework, Cake permite crear temas completamente independientes del resto del proyecto. Los temas están conpuestos de archivos .ctp (Cakephp template), y todos los archivos javascript, css o imágenes que se requieran en los mismos. Su estructura es sencilla, lo cual permite que, por ejemplo, un diseñador pueda trabajar en ellos sin afectar el resto del proyecto ni requerir de conocimientos de programación.
Cake también ofrece la posibilidad de utilizar helpers en las vistas, ya sea que uno mismo los construya o que utlice los que Cake provee. Entre los más utilizados está el Html Helper y el Form Helper, que proveen funciones para generar cualquier etiqueta html o propiedades e inputs de un formulario con sus respectivas opciones.
Por ejemplo, unas pocas instrucciones como:
Html->image('http://cakephp.org/img/cake-logo.png',array('title'=>'CakePHP Logo')); echo $this->Html->tag('h2', 'Form de ejemplo', array('class' => 'welcome')); //h2 echo $this->Form->create('User',array('action'=>'edit')); //inicio del form echo $this->Form->hidden('id'); //input oculto echo $this->Form->input('first_name',array('size'=>10)); echo $this->Form->input('email',array('size'=>10)); //D-M-Y input (Cake reconoce el tipo de campo desde la BD) echo $this->Form->input('dob',array('label'=>'Birthday')); //Dropdown $options = array(0=>'Please select an option',1=>'Option 1',2=>'Option 2'); echo $this->Form->input('status',array('type'=>'select','options'=>$options)); //link echo $this->Html->link('Cancel',array('action'=>'cancel'),array('title'=>'Cancel')); echo $this->Form->submit(); //Botón de submit echo $this->Form->end(); //cierre del form ?>
pueden generar el siguiente formulario:
Además Cake permite que el desarrollador escriba sus propios componentes. Es decir, una clase de Cake que puede ser utilizada en diferentes controladores y que puede aprovechar toda la maquinaria de Cakephp. Pero también, Cake acepta código de terceros que no esté en “formato Cake” y que igualmente puede ser usado en cualquier controlador o vista, conocidos como plugins (por ejemplo el TinyMCE puede ser usado como un plugin).
Más información
Existe muchísimo más que hablar de Cake. Por lo mismo Cake goza de una gran y creciente comunidad de desarrolladores que facilitan la consulta y el aprendizaje del framework.
The Cookbook es la documentación de Cakephp, pero a su vez es una comunidad abierta en donde cualquier desarrollador puede dejar su aporte o mejorar los de otros. También existe The Bakery, otra comunidad donde desarrolladores postean todo tipo de información sobre Cakephp, desde tutoriales y noticias hasta componentes, plugins, helpers, controladores, modelos, etc.
Además existen grupos de Google, tutoriales en Youtube y mucha más información que puede encontrarse en el sitio web de Cakephp.
¿Es PHP el mejor framework disponible actualmente?
Existen diversos frameworks para desarrollo en PHP, cada uno con sus ventajas y desventajas. Tal como mencionamos al inicio del artículo, nuestra empresa ha desarrollado exitosamente varias aplicaciones PHP a la medida utilizando CakePHP como framework con buen suceso los últimos dos años, no dudamos recomendarlo por esta misma razón. Ahora bien, recientemente también ha ganado mucha popularidad el framework Yii que igualmente nos resulta interesante y aporta una serie de ventajas. Recomendamos al lector aprender también sobre sus bondades, de manera que conozca todas las opciones disponibles para la toma de decisión sobre el framework a utilizar en sus proyectos.
En caso de seleccionar Cake, esperamos que la experiencia compartida en esta artículo les sea de gran utilidad. ¡Happy Baking!