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.     <![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.     ]]>
  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:

PHP:
  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.

5 Comments

  • By wendel, August 21, 2006 @ 18:55

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

    xoh tentar aqui…

  • By wendel, August 21, 2006 @ 19:07

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

    [as]
    var gatewayArgs:Array = new Array();
    gatewayArgs[0] = {‘a’:'a’,'b’:'b’};
    gatewayArgs[1] = {‘a’:'a’,'b’:'b’};

    gateway = new RemotingConnection(gatewayUrl);
    gateway.call( “Dashboard.PingBack”, new Responder(resultHandler,onFault),gatewayArgs);
    [/as]
    [code]
    [SWF] /projetos/RIA/app/Dashboard/bin/Dashboard-debug.swf - 1.247.125 bytes after decompression
    --EVENT--
    (Array)#0
    [0] (Object)#1
    a = "a"
    b = "b"
    [1] (Object)#2
    a = "a"
    b = "b"
    [/code]

  • By FlexMachine, October 8, 2006 @ 17:31

    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!

  • By Vítor Hugo, October 16, 2006 @ 12:11

    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.

  • By Leonardo França, October 16, 2006 @ 12:32

    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];
    }

Other Links to this Post

RSS feed for comments on this post. TrackBack URI

Leave a comment

WordPress Themes


Video & Audio Comments are proudly powered by Riffly