Passando argumentos para o AMFPHP usando o FLEX 2.0

Depois de saber como carregar dados de um banco de dados usando o AMFPHP com FLEX 2.0, surgiu uma dúvida, como passar argumentos para o AMFPHP? Depois de ler o artigo do Mike Potter vi que é muito simples.
Primeiro a nossa classe RemotingConnection que extende a NetConnection

ActionScript

  1. package {
  2.     import flash.net.NetConnection;
  3.     import flash.net.ObjectEncoding;
  4.    
  5.     public class RemotingConnection extends NetConnection {
  6.         public function RemotingConnection(sURL:String){
  7.             objectEncoding = ObjectEncoding.AMF0;
  8.             if(sURL){
  9.                 connect(sURL);
  10.             }  
  11.         }
  12.         public function AppendToGatewayUrl(s:String):void{
  13.                
  14.         }
  15.        
  16.     }
  17. }

Importamos essa classe para nossa aplicação e nos conectamos com o AMFPHP. Dessa vez colocarei dentro de um arquivo mxml o action script que chamara o AMFPHP,

ActionScript

  1. <mx :Script>
  2.     < !&#91;CDATA[
  3.         import flash.net.Responder;
  4.         public var gateway:RemotingConnection;
  5.         public function initApplication():void{
  6.             gateway=new RemotingConnection("http://localhost/flashservices/gateway.php");
  7.         }
  8.         public function get(Option:String):void{
  9.             var remote_str:String = Option; // string remota
  10.             gateway.call("teste.ola",new Responder(onResult,onFault),remote_str);
  11.         }
  12.         public function onResult(result:*):void{
  13.             output.text = result;
  14.         }
  15.         public function onFault(fault:*):void{
  16.             output.text = fault;
  17.         }
  18.     &#93;]>
  19. </mx>

Note que na seguinte linha:

ActionScript

  1. gateway.call("teste.ola",new Responder(onResult,onFault),remote_str);

O método call receberá um parametro a mais “remote_str”, esse é justamente o que será enviando para o AMFPHP, sendo por padrão um array. A primeiro parametro “teste.ola” são justamente o nome da classe e o metodo a ser invocado.
A classe em PHP é a seguinte:

  1. < ?php
  2. class teste{
  3.     function teste(){
  4.         $this->methodTable = array(
  5.         "ola" => array(
  6.         "description" => "testando o AMFPHP",
  7.         "access" => "remote", // available values are private, public, remote
  8.         "arguments" => array ("msg")
  9.         )
  10.         );
  11.     }
  12.  
  13.     function ola($msg){
  14.         return $msg;
  15.     }
  16. }
  17. ?>

Você pode ver o resultado nesse link
Segue o codigo mxml completo.

ActionScript 3.0, AMFPHP, Flash Platform, Flash Remoting, Flex, Principal, RIA

5 comments


  1. Hum… agora, passar estrutura de dados complexas, como objetos, como te falei… será que é possível?

    xoh tentar aqui…

  2. fiz uns testes e é possível passar argumentos complexos para o AMF, isso é legal d+, pq agora não preciso mais usar a JSON, 🙂

    ActionScript

    1. var gatewayArgs:Array = new Array();
    2. gatewayArgs[0] = {'a':'a','b':'b'};
    3. gatewayArgs[1] = {'a':'a','b':'b'};
    4.  
    5. gateway = new RemotingConnection(gatewayUrl);
    6. gateway.call( "Dashboard.PingBack", new Responder(resultHandler,onFault),gatewayArgs);
    1. [SWF] /projetos/RIA/app/Dashboard/bin/Dashboard-debug.swf - 1.247.125 bytes after decompression
    2. --EVENT--
    3. (Array)#0
    4.   [0] (Object)#1
    5.     a = "a"
    6.     b = "b"
    7.   [1] (Object)#2
    8.     a = "a"
    9.     b = "b"
  3. A tecnologia de comunicação do flex com o amfphp realmente é bem mais rápida do que com o url request, mas o artigo não está explicando direito, e nem expecifica os nomes das classes, o que dificulta para quem esta começando.

    Mas o resto esta show!

    viva o flex!

  4. Vítor Hugo

    Bem estou fazendo testes aqui passando argumento para o php, porem que só estou conseguindo passar valores numericos. String não passa.

    A estrutura no Flex é a seguinte:

    gateway.call( “teste.ola” , new Responder(onResult,onFault) , “testando…” );

    e no PHP eu pego:

    function ola($dado)
    {
    return $dado;
    }

    Eu não sei como é a estrutura da variavel $dado no php, alguem sabe? Porque pode ser um array e por isso nao estou conseguindo pegar.

    Um abraço.

  5. tente assim:
    var texto:Array = new Array(“testando….”);
    gateway.call( “teste.ola� , new Responder(onResult,onFault) , texto);
    no php vc pegará assim:
    function ola($dado=array())
    {
    return $dado[0];
    }

Leave a Reply