<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Daniel Zegarra &#187; ZendFramework</title>
	<atom:link href="http://danielzegarra.net/tag/zendframework/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielzegarra.net</link>
	<description>Tutoriales, críticas y la vida en Polska</description>
	<lastBuildDate>Sat, 21 Aug 2010 02:11:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Decidirse entre Zend AMF, AMFPHP, WebORB, &#8230;</title>
		<link>http://danielzegarra.net/2010/05/21/decidirse-entre-zend-amf-amfphp-weborb/</link>
		<comments>http://danielzegarra.net/2010/05/21/decidirse-entre-zend-amf-amfphp-weborb/#comments</comments>
		<pubDate>Fri, 21 May 2010 12:13:52 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[AS2]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[WebORB]]></category>
		<category><![CDATA[Zend AMF]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=1166</guid>
		<description><![CDATA[Para mi, decidir que framework usar para conectar una aplicacion Flex/Flash con un servidor PHP es todo un dilema debido a que mi eleccion influrira mucho en mi calendario de trabajo. Supongo a muchos les  pasara que se familiarizan con un pequeño grupo de lenguajes y/o  frameworks y lo utiliza en todo proyecto que crea [...]


Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2010/05/26/transfiriendo-valores-nan-entre-zend-amf-y-flex/' rel='bookmark' title='Permanent Link: Transfiriendo valores NaN entre Zend AMF y Flex'>Transfiriendo valores NaN entre Zend AMF y Flex</a></li>
<li><a href='http://danielzegarra.net/2010/06/07/tips-sobre-class-mapping-con-zend-amf/' rel='bookmark' title='Permanent Link: Tips sobre Class mapping con Zend AMF'>Tips sobre Class mapping con Zend AMF</a></li>
<li><a href='http://danielzegarra.net/2010/08/14/nace-kopernik-un-sistema-academico/' rel='bookmark' title='Permanent Link: Nace Kopernik, un sistema académico'>Nace Kopernik, un sistema académico</a></li>
<li><a href='http://danielzegarra.net/2010/03/14/la-directiva-date-timezone-de-php/' rel='bookmark' title='Permanent Link: La directiva date.timezone de PHP'>La directiva date.timezone de PHP</a></li>
<li><a href='http://danielzegarra.net/2010/01/17/amfphp-1-9-y-la-llegada-de-php-5-3/' rel='bookmark' title='Permanent Link: AMFPHP 1.9 y la llegada de PHP 5.3'>AMFPHP 1.9 y la llegada de PHP 5.3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Para mi, decidir que framework usar para conectar una aplicacion Flex/Flash con un servidor PHP es todo un dilema debido a que mi eleccion influrira mucho en mi calendario de trabajo. Supongo a muchos les  pasara que se familiarizan con un pequeño grupo de lenguajes y/o  frameworks y lo utiliza en todo proyecto que crea conveniente. Asi era yo con AMFPHP, el primer gateway AMF que conoci alla cuando Flash 8 era el ultimo lanzamiento de Macromedia.</p>
<p>En si tenemos tres o cuatro candidatos potenciales y estos son: <a href="http://zendframework.com/download/amf">Zend AMF</a>,  <a href="http://www.amfphp.org/">AMFPHP</a> y <a href="http://www.themidnightcoders.com/products/weborb-for-php/overview.html">WebORB</a>. A continuacion comento las caracteristicas de cada uno.</p>
<p><a href="http://www.amfphp.org/">AMFPHP </a>es creo, sin lugar a dudas, la mejor alternativa si deseas conectar tu aplicacion Flex o Flash con un servidor PHP (y este a su vez con la BD) y no deseas tener que pasar por una larga curva de aprendizaje. AMFPHP es ligero, incluye una gestion de roles bastante simple, no es necesaria su instalacion, soporta mapeo de clases (VOs) y por ultimo, incluye un navegador de servicios para que puedas probar los mismos rapidamente. Ademas, soporta AMF0 y AMF3 (por si usas AS2 o AS3) de forma transparente. Ademas, viene preparado para comsumir Web services. Entre sus desventajas estaba la falta de soporte. La persona detras del proyecto lo abandono dejandolo en una version beta (y sin la nueva documentacion completa) durante un par de años  pero recientemente su desarrollo <a href="http://wadearnold.com/blog/flash/amfphp/passing-the-amfphp-torch" target="_blank">acaba de ser retomado</a> y gracias a ello, se acaba de lanzar, por fin, la version 1.9 oficial.</p>
<p>El siguente es <a href="http://zendframework.com/download/amf">Zend AMF</a>, desarrollado por <a href="http://www.zend.com">Zend </a>(la empresa detras de PHP) es el mas apoyado de todas las alternativas debido a que tiene la venia de Adobe y, obviamente, es desarrollado por Zend. A pesar de esto, carece de  caracteristicas que AMFPHP o WebORB ya ofrecen (como seguridad integrada y un navegador de servicios) obligandote a implementarlas tu mismo o, lo que es mas facil, a vivir sin ellas. Pero su gran ventaja es que al ser una parte de Zend Framework (aunque se puede descargar de manera independiente) se acopla perfectamente a su arsenal de herramientas lo que es muy util, creeme. Hoy acabo de enterarme que el problema de la <a title="ZendAMF serialization slow?" href="http://framework.zend.com/issues/browse/ZF-7493" target="_blank">lenta serializacion de datos </a>que Zend AMF tenia en versiones anteriores acaba de ser solucionada de manera oficial en la version 1.10.4.</p>
<p>El tercero es <a href="http://www.themidnightcoders.com/products/weborb-for-php/overview.html">WebORB</a>. Si tuviera que definirlo en una sola palabra esa seria &#8220;Completo&#8221;. Tiene tantas caracteristicas que impresiona. Un administrador de servicios decente junto con opciones pensadas para ahorrarle al desarrollador la necesidad de escribir codigo, incluye su propio administrador de acceso a servicios y metodos ademas de un administrador centralizado para el mapeo de clases. Sin lugar a dudas es el que ofrece mas opciones a simple vista. El problema de WebORB es justo eso, ofrece tantas opciones que pueden confundir al novato, darle una sensacion de demasiada complejidad.</p>
<p>Escribo este post porque hace poco he pasado de AMFPHP a Zend AMF. Me costo hacer la mudanza debido a que tenia muchas clases que recibian matrices asociativas como parametros (AMFPHP mapeaba los objetos de Flash en arrays asociativos y Zend AMF lo hace como objetos) y basaba casi toda la implementacion de seguridad en el metodo <a href="http://www.joshuaostrom.com/2008/06/03/securing-amfphp-19-via-authentication/">beforeFilter </a>de cada clase/servicio.</p>


<p>Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2010/05/26/transfiriendo-valores-nan-entre-zend-amf-y-flex/' rel='bookmark' title='Permanent Link: Transfiriendo valores NaN entre Zend AMF y Flex'>Transfiriendo valores NaN entre Zend AMF y Flex</a></li>
<li><a href='http://danielzegarra.net/2010/06/07/tips-sobre-class-mapping-con-zend-amf/' rel='bookmark' title='Permanent Link: Tips sobre Class mapping con Zend AMF'>Tips sobre Class mapping con Zend AMF</a></li>
<li><a href='http://danielzegarra.net/2010/08/14/nace-kopernik-un-sistema-academico/' rel='bookmark' title='Permanent Link: Nace Kopernik, un sistema académico'>Nace Kopernik, un sistema académico</a></li>
<li><a href='http://danielzegarra.net/2010/03/14/la-directiva-date-timezone-de-php/' rel='bookmark' title='Permanent Link: La directiva date.timezone de PHP'>La directiva date.timezone de PHP</a></li>
<li><a href='http://danielzegarra.net/2010/01/17/amfphp-1-9-y-la-llegada-de-php-5-3/' rel='bookmark' title='Permanent Link: AMFPHP 1.9 y la llegada de PHP 5.3'>AMFPHP 1.9 y la llegada de PHP 5.3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2010/05/21/decidirse-entre-zend-amf-amfphp-weborb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usar el Service Browser luego del cambio del post anterior</title>
		<link>http://danielzegarra.net/2009/01/28/usar-el-service-browser-luego-del-cambio-del-post-anterior/</link>
		<comments>http://danielzegarra.net/2009/01/28/usar-el-service-browser-luego-del-cambio-del-post-anterior/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 16:33:04 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=590</guid>
		<description><![CDATA[Si seguiste el post anterior verás que el Service Browser que viene con AMFPHP1.9 dejo de funcionar. Pero, esto es facil de solucionar. Cambiar o agregar las siguientes líneas: services/amfphp/DiscoveryService.php //Linea 55 - Actualizar $methodTable = MethodTable::create($path . $className . '.php', $this-&#62;_path, $classComment); core/shared/app/BasicActions.php //Linea 13 - Agregar global $servicesPath; //Haciendo la variable global accesible [...]


Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2010/01/17/amfphp-1-9-y-la-llegada-de-php-5-3/' rel='bookmark' title='Permanent Link: AMFPHP 1.9 y la llegada de PHP 5.3'>AMFPHP 1.9 y la llegada de PHP 5.3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Si seguiste el <a title="Compatibilizando AMFPHP1.9beta2 con Zend Framework" href="http://www.danielzegarra.net/2009/01/27/compatibilizando-amfphp-19beta2-con-zend-framework/">post anterior</a> verás que el Service Browser que viene con AMFPHP1.9 dejo de funcionar. Pero, esto es facil de solucionar.</p>
<p>Cambiar o agregar las siguientes líneas:</p>
<p><strong>services/amfphp/DiscoveryService.php</strong></p>
<pre class="brush: php;">//Linea 55 - Actualizar
$methodTable = MethodTable::create($path . $className . '.php', $this-&gt;_path,
    $classComment);</pre>
<p><strong>core/shared/app/BasicActions.php</strong></p>
<pre class="brush: php;">//Linea 13 - Agregar
global $servicesPath; //Haciendo la variable global accesible dentro de la clase

//Linea 29 - Detectando el nuevo nombre de la clase
$amfbody-&gt;className = str_replace('/', '_'
    , str_replace('.php', ''
        , substr($amfbody-&gt;classPath
            , strrpos($amfbody-&gt;classPath, $servicesPath)+strlen(
                $servicesPath
            )
        )
    )
);</pre>
<p><strong>core/shared/util/MethodTable.php</strong></p>
<pre class="brush: php;">//Linea 71 - Reemplazar
$className = str_replace('/', '_', $className);</pre>
<p>Y por último, no olvides Actualizar el nombre de la clase <strong>DiscoveryService</strong> a <strong>amfphp_DiscoveryService</strong>.</p>
<p><strong>services/amfphp/DiscoveryService.php</strong></p>
<pre class="brush: php;">//Linea 7 - Actualizar
class amfphp_DiscoveryService</pre>


<p>Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2010/01/17/amfphp-1-9-y-la-llegada-de-php-5-3/' rel='bookmark' title='Permanent Link: AMFPHP 1.9 y la llegada de PHP 5.3'>AMFPHP 1.9 y la llegada de PHP 5.3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2009/01/28/usar-el-service-browser-luego-del-cambio-del-post-anterior/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compatibilizando AMFPHP1.9beta2 con Zend Framework</title>
		<link>http://danielzegarra.net/2009/01/27/compatibilizando-amfphp-19beta2-con-zend-framework/</link>
		<comments>http://danielzegarra.net/2009/01/27/compatibilizando-amfphp-19beta2-con-zend-framework/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 22:37:53 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=570</guid>
		<description><![CDATA[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 [...]


Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2010/01/17/amfphp-1-9-y-la-llegada-de-php-5-3/' rel='bookmark' title='Permanent Link: AMFPHP 1.9 y la llegada de PHP 5.3'>AMFPHP 1.9 y la llegada de PHP 5.3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>La verdad es simple.</p>
<p>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:</p>
<ul>
<li>Definiendolo en php.ini<br />
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 &#8220;:&#8221; para Linux o la barra oblicua &#8220;\&#8221; para Windows.</li>
<li>Agregando la siguiente línea en globals.php
<pre class="brush: 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() );
</pre>
</li>
</ul>
<p>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).</p>
<p>Agrega las siguientes líneas al final del archivo globals.php</p>
<pre class="brush: php;">
include 'Zend/Loader.php';
Zend_Loader::registerAutoload();
</pre>
<p>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.</p>
<p>Esto evita la redundancia de clases (al menos hasta que lleguen los <a title="PHP.net" href="http://www.php.net/manual/es/language.namespaces.php" target="_blank">namespaces </a>con php 5.3) y te sirve para que Zend_Loader pueda cargar las clases de forma dinámica.</p>
<p>Normalmente AMFPHP convierte los puntos en barras diagonales &#8220;/&#8221; 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.</p>
<pre class="brush: php;">
//Linea 122 (aproximadamente)
//Esto hará que el nombre de la clase sea ahora la ruta
//completa con guiones bajos mas el nombre del servicio
$classname = str_replace('.', '_', $trunced);
</pre>
<p>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.</p>
<p>Aqui tienes un servicio de prueba y el código en AS2 y AS3 para probarlo.</p>
<p>PHP service:</p>
<pre class="brush: php;">
class System_Prueba {
public function test(){
return 'Prueba exitosa';
}
}
</pre>
<p>ActionScript 2:</p>
<pre class="brush: java;">
import mx.remoting.*;
import mx.rpc.*;
var service = new Service('http://testserver/amfphp/gateway.php'
, null, 'System.Prueba');
var pc:PendingCall = service.test();
pc.responder = new RelayResponder(this, 'onRespond', 'onFault');
function onRespond(re:ResultEvent){
trace(re.result);
}
function onFault(fault:FaultEvent){
trace('Error');
}
</pre>
<p>ActionScript 3:</p>
<pre class="brush: java;">
import flash.net.*;
var rs:NetConnection = new NetConnection();
rs.connect('http://testserver/amfphp/gateway.php');
rs.call('System.Prueba.test', new Responder(onRespond, onFault));
function onRespond(re:Object){
trace(re);
}
function onFault(fault:Object){
trace('Error: '+fault.description);
}
</pre>
<hr /><strong><span style="color: #ff0000;">Actualización:</span></strong> Encuentro<a href="http://phpsenior.blogspot.com/" target="_blank"> </a>en el blog de <a href="http://phpsenior.blogspot.com/" target="_blank">Enrique Place</a> 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 <a href="http://phpsenior.blogspot.com/2009/05/por-actualizar-apurado-de-zf-17-18.html" target="_blank">este post</a>.</p>


<p>Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2010/01/17/amfphp-1-9-y-la-llegada-de-php-5-3/' rel='bookmark' title='Permanent Link: AMFPHP 1.9 y la llegada de PHP 5.3'>AMFPHP 1.9 y la llegada de PHP 5.3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2009/01/27/compatibilizando-amfphp-19beta2-con-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeros pasos con AMF y Zend Framework</title>
		<link>http://danielzegarra.net/2008/12/31/primeros-pasos-con-amf-y-zendframework/</link>
		<comments>http://danielzegarra.net/2008/12/31/primeros-pasos-con-amf-y-zendframework/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 10:12:51 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[AMF]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=493</guid>
		<description><![CDATA[Ahora que estoy de vacas tuve tiempo para leer la documentacion del framework de Zend para su PHP y esta bueno.  Decidi aprenderlo de una vez y empezar a usarlo en mis proyectos.  Una de las primeras cosas que busqué fue su compatibilidad con AMF puesto que estoy acostumbrado a usar AMFPHP para casi todo. [...]


Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2009/11/25/configurando-un-gateway-de-red-con-ubuntu/' rel='bookmark' title='Permanent Link: Configurando un gateway de red con Ubuntu'>Configurando un gateway de red con Ubuntu</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Ahora que estoy de vacas tuve tiempo para leer la documentacion del framework de Zend para su PHP y esta bueno. </p>
<p>Decidi aprenderlo de una vez y empezar a usarlo en mis proyectos. </p>
<p>Una de las primeras cosas que busqué fue su compatibilidad con AMF puesto que estoy acostumbrado a usar AMFPHP para casi todo. Zend Framework viene con clases para trabajar con AMF y son clases muy buenas. </p>
<p>En 15 minutos arme mi gateway AMF en PHP con tan solo 7 lineas de codigo y cree un flash simple para probar mi servidor. </p>
<p>A este servidor solo le falta agregarle la autenticación y Zend Framework trae clases para eso tambien. </p>
<p>Puedes descargarte el Gateway + Service y Flash de ejemplo en el siguiente enlace.</p>
<a href="http://danielzegarra.net/download/1" title="Gateway AMF simple  creado usando ZendFramework ademas de un servicio y archivo flash de ejemplo">Descargar Gateway AMF usando ZF + Service y Flash de ejemplo</a>
<p>Necesita tener las librerìas de <a title="Ir a ZendFramework" href="http://framework.zend.com/" target="_blank">Zend Framework </a>junto al ejemplo.</p>


<p>Entradas posiblemente relacionadas con este post:<ol><li><a href='http://danielzegarra.net/2009/11/25/configurando-un-gateway-de-red-con-ubuntu/' rel='bookmark' title='Permanent Link: Configurando un gateway de red con Ubuntu'>Configurando un gateway de red con Ubuntu</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2008/12/31/primeros-pasos-con-amf-y-zendframework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.259 seconds -->
