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.
Hum… agora, passar estrutura de dados complexas, como objetos, como te falei… será que é possÃvel?
xoh tentar aqui…
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]
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!
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.
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];
}