Resultado de etiquetas “cakephp”

Para una aplicación basada en AJAX usando Prototype resulta muy útil el uso de referencias locales (named anchors) para que el navegador nos muestre la porción de la página adecuada. Un ejemplo sería:

<?=$ajax->link('Añadir', null, array('fallback'=>'#add', 'url'=>"/miapp/add/", 'update'=>"add", 'complete'=>"new Effect.Appear('add');")) ?>
<a name="add"></a>
<div id="add" style="display:none"></div>

Este código se ejecuta sin problemas en Firefox, sin embargo en Internet Explorer su comportamiento es irregular, llegando a no hacer nada (aparentemente) la mayoría de las veces y no indicando un error en ningún momento. El problema comienza al tener el identificador de la capa (DIV) y el nombre del marcador (anchor) exactamente iguales. La solución más simple es llamarlos de forma diferente.

<?=$ajax->link('Añadir', null, array('fallback'=>'#add_pos', 'url'=>"/miapp/add/", 'update'=>"add", 'complete'=>"new Effect.Appear('add');")) ?>
<a name="add_pos"></a>
<div id="add" style="display:none"></div>

Las restricciones de seguridad que impiden a javascript a acceder al sistema de archivos no nos permiten poder realizar tareas como el envío de ficheros al servidor (upload). Si pretendíamos realizar esto con Ajax nos golpearemos con un muro una y otra vez. Sí es posible emular un comportamiento similar al que conseguiríamos con Ajax usando las ya viejas técnicas de iframes ocultos.

La simulación consiste básicamente en realizar el en envío del formulario (submit) teniendo como destino (target) un iframe oculto del que podemos capturar el evento onload para detectar la finalización del envío del archivo.

Para practicar con esto he preparado un ejemplo usando Cake en Laboratorio cakePHP: #0608111 ajax upload. El ejemplo consiste en poder subir archivos sin "recargar" la página. Mediante Ajax se muestran los seis últimos archivos subidos y sus tamaños en bytes. En el formulario tenemos la suma del tamaño de los archivos (actualizado con Ajax) y un campo en el que podemos añadir una cantidad para realizar la suma al pulsar en "Calcular", momento en el que se recargará la página.

Aunque puede no aparecer útil, he creado un dbo_dummy que me permite trabajar sin conexión a base de datos. De esta forma puedo hacer pruebas y barbaridades sin estar conectado una base de datos cuando realmente no la necesito. Lo he creado siguiendo los pasos de como usar nuestro propio dbo en cakePHP

Aunque cakePHP ya cuenta con acceso a las bases de datos más usuales, puede ocurrir que necesitemos añadir un nuevo dbo programado por nosotros.

Para crear el nuevo dbo_mio en cakePHP versión 1.1.6.3264 deberemos:

  1. Crear un archivo vacío como app/models/dbo/dbo_mio.php. La utilidad de este archivo es permitir el correcto funcionamiento de file_exists en connection_manager.php (línea 150). Se debe a un pequeño bug, por el que busca que el archivo exista en una ruta y luego lo toma de otra ruta distinta..
  2. Creamos el verdadero archivo como app/models/datasources/dbo/dbo_ mio.php

Por defecto, cakePHP viene preparado para trabajar en el directorio base del servidor del dominio, como http://www.mabarroso.com. Es muy común que necesitemos que trabaje en una URL distinta, como http://www.mabarroso.com/miaplicacion/. Esto es muy simple de conseguir modificando dos archivos .htacces:

miaplicacion\.htaccess
       RewriteEngine on
       RewriteRule    ^$ /miaplicacion/app/webroot/    [L]
       RewriteRule    (.*) /miaplicacion/app/webroot/$1 [L]
miaplicacion\app\webroot\.htaccess
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ /miaplicacion/app/webroot/index.php?url=$1 [QSA,L]

Los teclados de muchos desarrolladores se están revolucionando con Rails. Otros se resisten a pasarse a Ruby por distintas razones. Con el objetivo de trabajar con PHP con una aproximación bastante buena de las ventajas que ofrece Rails nos encontramos CakePHP.

CakePHP es un framework MVC inspirado en Rails. Adopta de él su filosofía y mucho de su funcionamiento, aunque detalles propios de Rubi no compatibles con PHP han sido adaptados lo mejor posible.

Comenzar a trabajar con CakePHP es inmediato. No se necesitan crear ficheros de configuración. Simplemente hay que definir la conexión a la base de datos y comenzar a crear las clases que necesitemos. Si nos ajustamos a sus reglas para definir los nombres (en ingles) de las clases, vistas y tablas las líneas de código se reducen ya que Cake será capaz de enlazar los distintos elementos modelo-vista-controlador. Incluye asistencias para AJAX, HTML, Javascript, CSS y formularios entre otros.

Las pegas principales son la aún escasa información en la web y la mala organización del manual, que se apoya excesivamente en un wiki poco actualizado y con entradas muy obsoletas. Para iniciarte el tutorial es rápido y completo.

1