Compatibilizando AMFPHP1.9beta2 con Zend Framework

La verdad es simple.

Primero, incluir el directorio donde se encuentra los archivos de Zend Framework entre las rutas a cargar archivos por defecto. Esto puede hacerse de dos formar:

  • Definiendolo en php.ini
    La clave a cambiar tiene el nombre de include_path. Esta es una cadena con rutas separadas por un caracter especial. Este puede diferir de acuerdo al SO siendo los dos puntos «:» para Linux o la barra oblicua «\» para Windows.
  • Agregando la siguiente línea en globals.php
    [sourcecode language=’php’]
    //El siguiente método define un directorio más a la lista de
    //rutas por defecto al usar include o require
    //Cambia ZendLibrary por el directorio donde tengas la libreria.
    //Ejm: /../../ZendLib
    set_include_path( realpath(dirname(__FILE__)) . ‘/ZendLibrary’
    . PATH_SEPARATOR . get_include_path() );
    [/sourcecode]

Luego, agregar un par de líneas al bootstrap de AMFPHP para que cargue la clase Zend_Loader y asi nuestros servicios puedan usar otras clases/servicios sin tener que cargarlos al inicio (Y asi te ahorras de estar escribiendo tanto require_once).

Agrega las siguientes líneas al final del archivo globals.php

Por ultimo, debes configurar AMFPHP para que convierta los puntos que describen las rutas de tus clases en undelines (_). Zend Framework incluye en los nombres de sus clases la ruta completa donde esta se encuentra y mantenendo el nombre estandar como nombre de archivo.

Esto evita la redundancia de clases (al menos hasta que lleguen los namespaces con php 5.3) y te sirve para que Zend_Loader pueda cargar las clases de forma dinámica.

Normalmente AMFPHP convierte los puntos en barras diagonales «/» y el ultimo elemento lo toma como nombre del servicio/clase. Hay que hacer que como nombre de la clase use la ruta completa pero cambiando las barras diagonales por underlines. Para esto debes cambiar una sola linea de codigo en el archivo core\amf\app\Actions.php ubicado en tu instalacion de AMFPHP. Te recomiendo hacer una copia de este mismo antes de realizar un cambio.

Eso es todo. No te olvides de recodificar los nombres de tus clases si es que ya has empezado algunas. Asi mismo, si tus clases usaban a su vez otras, tambien debes actualizar estas llamadas o tu script se detendrá sin entregar error alguno a flash.

Aqui tienes un servicio de prueba y el código en AS2 y AS3 para probarlo.

PHP service:

ActionScript 2:

ActionScript 3:


Actualización: Encuentro en el blog de Enrique Place el aviso de un cambio importante con el uso de la clase Zend_Loader en la última versión de ZendFramework 1.8 y futuras versiones. Es una buena idea revisar este post.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.