OBSERVACION: amfPHP 1.9 es soportado hasta Php 5.2.xxx
Ejemplo a Elaborar:
Para conectar una aplicación Flex con PHP necesitamos un protocolo que pueda hablar los 2 idiomas que pueda hablar Flex y que pueda hablar PHP y aun más pueda traducir lo que habla uno para entender al otro. AMF (Action Message Format) es un formato binario basando en SOAP (Simple Object Access Protocol). AMF fue creado para intercambiar datos entre aplicaciones Adobe Flash y bases de datos, básicamente usando RPC (Remote Procedure Call).
AMF contiene una estructura completa que contiene manejo de ERRORES y una RESPUESTA que estaremos esperando como un Objeto de ActionScript, esto quiere decir en pocas palabras que AMF al hacer una petición puede devolver 2 cosas una respuesta en el evento RESULT y si en dado caso exista un error en la trasmisión de datos o simplemente no existe lo que estamos buscando el error se devolverá en el evento FAULT.
AMF por ser un formato binario tiende a ser más rápido en la comunicación que el paso POST o GET de PHP o el enviar un XML a php interpretarlo y devolver un XML e interpretarlo en Flash.
SOAP, es un protocolo para mandar información estructurada implementada en Web Services, que sirve para hacer RPC para la negociación y recepción de mensajes.
En este ejemplo veremos cómo conectar FLEX con PHP mediante AMFPHP, creando un simple servicio web en el cual mandaremos un mensaje y recibiremos el mismo mensaje en FLEX.
Lo primero que necesitamos es la carpeta de AMFPHP que la podemos encontrar en esta dirección http://sourceforge.net/project/showfiles.php?group_id=72483&package_id=72363&release_id=541961 y podemos bajarla de cualquiera de los dos espejos.
Y procedemos al darle al LINK que dice “Load the service browser” que es lo mejor que se a podido inventar AMFPHP que es un brower de WEB SERVICES donde podemos probar nuestros servicio debugearlos y hasta generar códigos que funcionan en FLX y FLASH para los que SOMOS un poco Flojos al momento de programar.
El código de HelloWord.php:
<?php class HelloWorld { function HelloWorld(){ } function say( $mensaje ) { return 'USTED ESCRIBIO: ' . $mensaje ; } } ?>
Entonces en Eclipse vamos a FILE -> NEW -> FLEX PROJECT
Bueno ya toda la configuración esta, ahora, manos a la obra.
Vamos a crear un texto de entrada donde podremos escribir el mensaje que queramos, crearemos un Botón el cual se encargara de enviar la información que queramos a PHP y luego crearemos un texto de Salida el cual se encargara de leer lo que PHP nos allá mandado.
Codigo tutorialAMFPHP.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" > <mx:Script> <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; private function onClick():void{ amf.say.send(myText.text); } private function handlerResult(e:ResultEvent):void{ outText.text = String (e.result); } private function handlerFault(e:FaultEvent):void{ outText.text = String (e.message); } ]]> </mx:Script> <mx:RemoteObject id="amf" source="HelloWorld" destination="amfphp"> <mx:method name="say" result="handlerResult(event);" fault="handlerFault(event);"/> </mx:RemoteObject> <mx:VBox verticalGap="10" horizontalGap="10" paddingLeft="10" paddingTop="10"> <mx:HBox> <mx:Label text="MENSAJE A ENVIAR ->"/> <mx:TextInput id = "myText" /> <mx:Button click="onClick();" label="Enviar"/> </mx:HBox> <mx:HBox> <mx:Label text="MENSAJE A LLEGAR ->"/> <mx:TextArea id="outText" /> </mx:HBox> </mx:VBox> </mx:Application>
Una ves escrito el código esto no es todo lo que necesitamos, FLEX BUILDER no sabes nada de que existe AMFPHP entonces de algún modo se lo tenemos que decir mediante un archivo de configuración de SERVICIOS que es el que dice mira para comunicar PHP con FLEX usaremos AMFPHP.
Este archivo lo llamaremos SERVICES-CONFIG.XML y lo llenaremos con el siguiente código:
<?xml version="1.0" encoding="UTF-8"?> <services-config> <services> <service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage"> <destination id="amfphp"> <channels> <channel ref="my-amfphp"/> </channels> <properties> <source>*</source> </properties> </destination> </service> </services> <channels> <channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel"> <endpoint uri="/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> </channels> </services-config>
Una ves que tengamos esta configuración puesta en muestra carpeta SRC vamos a tener que decirle al compilador que ese archivo esta hay de el siguiente modo, hacemos Click derecho en nuestro proyecto luego vamos a “PROPIEDADES” y en FLEX COMPILER en el espacio que dice ADDITIONAL COMPILER ARGUMENTS agregamos, no borramos nada solo agregamos un espacio y colocamos -services "services-config.xml"
Una ves hecho esto Estamos listo para Probar nuestro programa y comunicarnos con HelloWorld.php mediante WEB SERVICES.
Antes de terminar este tutorial, quiero hacer unas acotaciones MUY IMPORTANTES y se las presentare \en las siguientes imágenes.
Una acotación para esta imagen es Supongamos que tenemos una carpeta dentro de services llamada MyServices y nos queda C:\wamp\www\amfphp\services\MyServices y tenemos nuestro HelloWord.php dentro de esa carpeta en nuestro código justo donde dice SOURCE=”HelloWorld” colocaremos SOURCE=”MyServices.HelloWorld” para poder hacer referencia al mismo nada de MyServices/HelloWorld ni nada parecido.
En cuanto a los métodos podemos tener tantos métodos como dentro del HelloWold.php hallan.
En otras palabras, se colocarían en tantos tag de Method como funciones tengamos dentro de HelloWorld.php.
Y por ultimo
Esta imagen sale acotación para prevenir que si ustedes tienen AMFPHP EN OTRO LUGAR que no sea C:\wamp\www\amfphp entonces nuestro SERVICES-CONFIG.XML no nos va a servir por lo que el proyecto no va a funcionar tampoco.
Aquí les dejo todos los archivos y el ejemplo corriendo
Descargar Archivos:
Ejemplo:
Saludos.
hola, esta muy chido tu post, pero tengo un error, en la parte donde selecciono HelloWorld, me aparece un error envez de que me karge la pagina:
ResponderBorrarService : null
Error retrieving service info:
Function eregi_replace() is deprecated
C:\wamp\www\amfphp\core\shared\util\MethodTable.php on line 505
Hola, Gracias por tu comentario.
ResponderBorrarHe visto ese error varias veces y se puede arreglar de 2 formas:
Editando el Archivo en la linea 505 entonctraras
$comment = eregi_replace("\n[ \t]+", "\n", trim($comment));
$comment = str_replace("\n", "\\n", trim($comment));
$comment = eregi_replace("[\t ]+", " ", trim($comment));
Y lo cambias por este otro
$comment = preg_replace("`\n[ \t]+`U", "\n",trim($comment));
$comment = str_replace("\n", "\\n", trim($comment));
$comment = preg_replace("`[\t ]+`U", " ",trim($comment));
La otra forma de resolverlo es que cambies de version del PHP a una menor, lo cual no es muy recomendable. Siempre buscamos estar en la version mas actual. no es asi ?
Saludos.
espero te sirva.
Hola tengo este error, y quisiera saber si podrias ayudarme muchas gracias =)....
ResponderBorrarWarning: include(core/amf/app/Gateway.php) [function.include]: failed to open stream: No such file or directory in C:\wamp\www\amfphp\gateway.php on line 112
Warning: include() [function.include]: Failed opening 'core/amf/app/Gateway.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\amfphp\gateway.php on line 112
Fatal error: Class 'Gateway' not found in C:\wamp\www\amfphp\gateway.php on line 114
Implementando en Xampp y en el buscador de servicios, pestaña resuñltados obtengo
ResponderBorrar(Object)#0
message = "faultCode:null faultString:'null' faultDetail:'null'"
name = "Error"
rootCause = (null)
y en Hellow World obtengo
Error retrieving service info:
Invalid AMF message
Hola
ResponderBorrarque version de PHP y de AMF estas usando
Para este ejemplo se utilizo
Flex 3 con php 5.2 y amf 1.9
Saludos
PHP Version 5.2.9 y el AMF php 1.2 y yo trabajo con Catalyst CS5 y Builder CS5 pero da igual si ocupo flex o Catalyst por que a ese punto no he llegado
ResponderBorrarademas yo opero con Xampp que es como Wampp pero con Correito
ResponderBorrarXampp o Wampp es indiferente, trata de usar el amf 1.9 o en su defecto el 2.0 que ente año salio como release...
ResponderBorrarpara verificar que amf fue instalado correctamente puedes hacerle http://localhost/amfphp/gateway.php
siempre y cuando hayas colocado la carpeta amfphp en la carpeta home del apache o la carpeta home que hayas especificado en el httpd-vhosts.conf del apache.
la version old de la que hablo es la de Xampp
ResponderBorrarOOOh y mi post desaparecio??? ke fome
ResponderBorrarsi no se porque desaparece... pero que bueno que ya tienes la solución...
ResponderBorrarCualquier cosa, estamos a la orden.
Saludos
comparta la solucion que di colega ... se ahorran muchos dolores de cabeza
ResponderBorrarEXPUESTO POR TOOM@S
ResponderBorrarResuelto
Esto es para Xampp,
1-.Descargar una version old de preferencia la que no incluya Tomcat.
2-.este esquema funciona solo con php antiguo de preferencia hasta las ediciones hechas en el 2009 despues se complica la cosa.
3.- Ahora seguir con la descarga de AMFphp (cualquiera antiguo no la ultima edicion ya que existe un cambio dentro del orden carpetas.
4.- editar el archivo MethodTable.php en la linea 505 (Expuesto anteriormente por el admin de esta pagina).
descargar el enlace a hellow world.php del link al final del primer post(aun cuando viene vacio, igual vale luego veran porque).Ahora copian el texto php y automagicamente funcionara XDDDDD eso es todo
Thanks por subir mi post xd Un abrazo y hasta luego
ResponderBorrar