Tag: Zend Framework
Integrando Flash + PHP via Zend AMF
by Claudney on jun.09, 2009, under AMF, Dicas, Flash, PHP, Programação, Web, Zend Framework
Em primeiro lugar devemos baixar a versão mais estável do Zend Framework (ZF).
Pode ser baixada através deste link: http://www.zendframework.com/download/latest, neste exemplo que vamos demostrar foi utilizado a versão: ZendFramework-1.8.2-minimal.
Esse tutorial visa somente iniciar como fazer integração via AS3 e o PHP através do Zend AMF, com isso não iremos detalhar o funcionamento do Framework, mas e ai como vou criar minha aplicação, tenho que configurar o ZF certo?
Correto iremos utilizar a ferramenta que gera um esqueleto da aplicação do ZF sem a necessidade de configurarmos manualmente, mas vale a pena dar uma lida na documentação do framework que possui uma infinidade de recursos disponíveis pode conferir em: http://www.zendframework.com/docs/quickstart.
Concluído o download descompacte o arquivo em uma pasta de sua preferência e através do prompt de comando acesse a pasta bin e execute o seguinte comando:
# linux: zf.sh create project amf # Windows: zf.bat create project amf
Após a execução do comando acima ele vai gerar a seguinte estrutura de diretórios, que é a estrutura padrão para as aplicações do ZF.
amf
|-- application
| |-- Bootstrap.php
| |-- configs
| | `-- application.ini
| |-- controllers
| | |-- ErrorController.php
| | `-- IndexController.php
| |-- models
| `-- views
| |-- helpers
| `-- scripts
| |-- error
| | `-- error.phtml
| `-- index
| `-- index.phtml
|-- library
|-- public
| `-- index.php
`-- tests
|-- application
| `-- bootstrap.php
|-- library
| `-- bootstrap.php
`-- phpunit.xml
Após a criação desta estrutura copie a pasta Zend que se encontra dentro da pasta libray de onde você descompactou o arquivo do ZF, para a pasta library da sua aplicação, e em seguida mova a estrutura para a sua pasta htdocs do seu servidor web.
Após seguir os passos acima acesse o endereço: Exemplo: http://localhost/amf/public, deverá gera uma janela exemplo a mostrada abaixo:
Agora já podemos criar nosso servidor AMF para a integração com o Flash.
Agora temos 2 opções podemos criar um arquivo contendo um Objeto que vai conter todos os métodos que queremos que o Flash acesse, ou criar nossa biblioteca de funções. Eu prefiro a primeira opção mas vou dar exemplo das duas.
Vamos criar dentro da pasta library da nossa aplicação dois arquivos:
Com os seguintes conteúdos:
<?php #ARQUIVO Funcoes.php /* * BIBLIOTECA DE FUNÇÕES PARA INTEGRAÇÃO COM AMF * @author claudney */ /** * REALIZA SOMA * @param integer $x * @param integer $y * @return integer total */ function soma($x,$y){ return (int) $x+$y; } /** * retorna quadrado de um numero qualquer * @param integer $num * @return integer total */ function quadrado($num){ return (int) $num*$num; } ?> --------------------------------------------- <?php #Arquivo Classe.php /* * OBJETO PARA INTEGRAÇÃO COM AMF VIA ZEND * @author claudney */ class Classe { /** * REALIZA SOMA * @param integer $x * @param integer $y * @return integer total */ public function soma($x,$y){ return (int) $x+$y; } /** * retorna quadrado de um numero qualquer * @param integer $num * @return integer total */ public function quadrado($num){ return (int) $num*$num; } } ?>
Em seguida abra o arquivo index controller e altere o método indexAction adicionando as seguintes linhas, para que fique como mostrado abaixo:
public function indexAction() { require "Funcoes.php"; require "Classe.php"; $server = new Zend_Amf_Server(); $server->setClass('Classe') //aqui adicionamos o nosso objeto no servidor ->addFunction('soma') //aqui adicionamos a funcao soma ->addFunction('quadrado'); //e por ultima a funcao quadrado $response = $server->handle(); echo $response; exit; }
Se executar o endereço: novamente sera solicitado para fazer donwload de um arquivo cuja o conteúdo será "Zend AMF endpoint", ou seja somente o Flash ou Flex poderá acessar seu conteúdo.
Agora só nos resta o Flash, crie um filme com os seguintes elementos:
A organize-os para que fique semelhante a imagem abaixo:
Nome os inputs como: funcao, param1, param2, retorno e botao, que utilizaremos em nosso Action Script.
Apos criar todos os elementos vamos criar nosso Action Script 3:
//Imports de bibliotecas import flash.display.MovieClip; import flash.events.*; import flash.net.NetConnection; import flash.net.Responder; botao.addEventListener(MouseEvent.CLICK, minhaFuncao); function minhaFuncao(e:MouseEvent):void{ var gateway:String = "http://127.0.0.1/amf/public/"; //ENDERECO DO SERVIDOR AMF var connection:NetConnection; var responder:Responder; responder = new Responder(onResult, onFault); //RESPONDER COM FUNCOES DE CALLBACK connection = new NetConnection; //CRIAMOS UMA NOVA CONEXAO connection.connect(gateway); //APONTAMOS PARA O ENDERECO QUE FOI INFORMADO //CRIAMOS A CHAMADA DINAMICA PARA OS METODOS DO PHP connection.call(funcao.text, responder,param1.text,param2.text); } //ABAIXOA FUNCAO DE CALLBACK QUE É EXECUTADO NO //QUANDO O METODO RETORNA SUCESSO function onResult(result:Object):void { retorno.text = String(result); } //FUNÇÃO QUE RETORNA ERRO CASO OCORRA function onFault(fault:Object):void { retorno.text =(String(fault.description)); }
Agora podemos executar o nosso arquivo e chamar as funções e ver o resultado diretamento no flash, sem ter que gerar XML´s ou arquivos TXT´s para essa integração.
Utilizando a chamada do metodo do Objeto:

Utilizando a chamada por função:

Se quiser chamar diretamente dentro do Flash basta utilizar o comando:
connection.call('Objeto.metodo', responder,param1....paramN); //ou connection.call('funcao', responder,param1....paramN);


