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
[as]
package {
import flash.net.NetConnection;
import flash.net.ObjectEncoding;

public class RemotingConnection extends NetConnection {
public function RemotingConnection(sURL:String){
objectEncoding = ObjectEncoding.AMF0;
if(sURL){
connect(sURL);
}
}
public function AppendToGatewayUrl(s:String):void{

}

}
}
[/as]
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,
[as]

< ![CDATA[ import flash.net.Responder; public var gateway:RemotingConnection; public function initApplication():void{ gateway=new RemotingConnection("http://localhost/flashservices/gateway.php"); } public function get(Option:String):void{ var remote_str:String = Option; // string remota gateway.call("teste.ola",new Responder(onResult,onFault),remote_str); } public function onResult(result:*):void{ output.text = result; } public function onFault(fault:*):void{ output.text = fault; } ]]>

[/as]
Note que na seguinte linha:
[as]
gateway.call(“teste.ola”,new Responder(onResult,onFault),remote_str);
[/as]
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]
< ?php class teste{ function teste(){ $this->methodTable = array(
“ola” => array(
“description” => “testando o AMFPHP”,
“access” => “remote”, // available values are private, public, remote
“arguments” => array (“msg”)
)
);
}

function ola($msg){
return $msg;
}
}
?>
[/php]
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, 🙂

    [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]

  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