Canais iMasters

Flex + MySQL + PHP

Populando um DataGrid no Flex com PHP e MySQL

Olá comunidade Flex. Este é meu primeiro artigo publicado no iMasters e o objetivo é aprendermos a popular um DataGrid, utilizando o PHP como camada intermediária entre o Flex e o MYSQL. Para tanto, utilizaremos o AMFPHP, que é uma alternativa open-source do Flash Remoting.

Pré-requisitos:

01. Noções básicas do Flex 2.0;
02. Possuir um servidor (IIS ou Apache) rodando em localhost;
03. Servidor MYSQL (também em localhost);
04. AMFPHP instalado e configurado.

Como o objetivo deste artigo não é aprendermos a configurar o IIS (ou Apache) nem o MySQL, começaremos com o AMFPHP, que você encontra em www.amfphp.org. Após ter baixado o pacote, descompacte-o em uma pasta qualquer e torne-a compartilhada para web (sugestão c:\amfphp).

A estrutura deverá ficar como a seguir:

Crie no MySQL, uma tabela com a estrutura a seguir:

CREATE TABLE 'contatos' (
  'id' int(11) unsigned NOT NULL auto_increment,
  'nome' varchar(60) collate latin1_general_ci NOT NULL,
  'email' varchar(60) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Obs.:

01. Adicione alguns registros na tabela recém-criada (utilizando o software de sua preferência). Caso contrário, não haverá dados para popular do DataGrid, pois como já falei anteriormente, o motivo deste artigo é apenas popular um DataGrid e não inserir ou alterar dados na tabela (este assunto, veremos em outra matéria, em breve).

02. O nome do banco de dados deverá ser flexcomphp.

Vamos ao código PHP.

Crie um arquivo chamado conexao.php na pasta services da sua recém criada pasta onde está o AMFPHP, com o código a seguir:

<?php
// criando uma classe para PHP Remoting
class conexao {
            function conexao() {
            $this->methodTable = array(
                        "getLista" => array(
                                   "description" => "Retorna conteudo da tabela",
                                   "access" => "remote"));
            }

            function getLista() {
                        $conexao = mysql_connect("localhost","root","");
                        mysql_select_db("flexcomphp", $conexao);
                        //
                        $sql = "SELECT * FROM contatos";
                        $resultado = mysql_query($sql, $conexao);
                        while ($linha = mysql_fetch_object($resultado)) {
                                               $ArrayRetorno[]=$linha;
                        }
                        //
                        mysql_free_result($resultado);
                        return($ArrayRetorno);
            }
}
?>

Obs.: Por se tratar de uma classe, note que o nome do arquivo e o nome da classe construtora deverão ser idênticos, no nosso caso conexao.php.

Uma boa forma para sabermos se está tudo OK até agora é o seguinte endereço: http://localhost/<nomedapastaondeestaoamfphp>/browser/index.html

Onde: <nomedapastaondeestaoamfphp> deverá ser substituído pelo caminho onde você instalou e compartilhou o amfphp.

Se tudo estiver correto, deverá aparecer o seguinte:

Agora, vamos ao código MXML:

Abra o Flex e crie um novo projeto básico (no meu caso eu usei o nome flexcomphp).

01. File > New > Flex Project, deixe a opção default (Basic) selecionada e pressione Next.
02. Escolha um nome para o projeto. No meu caso eu usei flexcomphp. Desmarque a opção Use default location e escolha uma pasta para nosso novo projeto Flex.
03. Pressione Finish

No modo source, digite o código a seguir:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
                creationComplete="buscaDadosMYSQL()">
                <mx:DataGrid dataProvider="{PHPDados}" x="10" y="10">
                               <mx:columns>
                                               <mx:DataGridColumn headerText="Código" dataField="id"/>
                                               <mx:DataGridColumn headerText="Nome" dataField="nome"/>
                                               <mx:DataGridColumn headerText="email" dataField="email"/>
                               </mx:columns>
                </mx:DataGrid>
                <mx:Script>
                               <![CDATA[
                                               import flash.net.Responder;
                                               //
                                   [Bindable]
                                               public var PHPDados: Array;
                                               //
                                               public var gateway: ConexaoRemota;
                                               //
                                               public function buscaDadosMYSQL():void {
                                                               gateway = new ConexaoRemota("http://localhost/amfphp/gateway.php");
                                                               gateway.call("conexao.getLista", new Responder(onOK, onFalha))
                                               }
                                               //
                                               public function onOK(resultado:Array):void {
                                                               PHPDados = resultado;
                                               }
                                               //
                                               public function onFalha(falha:String):void {
                                                               trace(falha);
                                               }
                               ]]>
                </mx:Script>         
</mx:Application>

Agora, vamos criar um arquivo ActionScript chamado ConexaoRemota.as, o qual deverá estar na pasta root de seu projeto Flex recém-criado, com o seguinte código:

package {
                import flash.net.NetConnection;
                import flash.net.ObjectEncoding;
                //
                public class ConexaoRemota extends NetConnection {
                               public function ConexaoRemota(strURL:String) {
                                               objectEncoding = ObjectEncoding.AMF0;
                                               //
                                               if(strURL) connect(strURL);
                               }
                              
                }
               
}

Note, mais uma vez, que por se tratar de uma classe, o nome externo da classe e do método construtor deverão ser idênticos. Nesse caso, ConexaoRemota.as.

Agora nosso projeto está completo, basta apenas testá-lo.

Não vamos esquecer que para rodar nosso projeto, devemos executá-lo através de nosso servidor de internet, no nosso caso o endereço será:

http://localhost/flexcomphp/bin/flexcomphp.html

Obs.: Não podemos esquecer que, de acordo com a política de restrição de acesso da Adobe (que um .SWF só poderá acessar uma base de dados localizada no mesmo domínio), deveremos compartilhar nossa pasta (que contém o projeto recém criado no Flex) como se fosse uma pasta Web.

Espero ter sido útil. Até breve!

Marcelo Gallina

Marcelo Gallina

atua como desenvolvedor há 13 anos, tendo como foco principal o desenvolvimento de aplicativos web há 2 anos, utilizando Flash e Dreamweaver. Agora concentra seus conhecimentos para desenvolvimento usando Flex.


Comente também

15 Comentários

Gustavo Henrique Carvalho e Silva
Gustavo Henrique Carvalho e Silva

Apenas uma sugestão: deveria ter um artigo explicando como instalar o AMFPHP. Nem todos que acessam aqui são "experts", ou seja, ainda estão aprendendo a usar o Flex.

Izaque C S
Izaque C S

Muito simples, baixe o AMFPHP da net e jogue na mesma pasta da aplicação no servidor php.Acesse http://seuservidor/suaaplicacao/amfphp/gateway.php e click em "Load the service browser" vai aparecer a tela "Configuration" só clic em save, não feche o browser. Dentro da pasta amfphp/services crie uma pasta "minhaaplicação" e jogue as classes php dentro. No tela do amfphp do navegador de um refresh e voce vai ver as classes e funções ai podera testar. Agora como usa no flex aí sim precisa de um artigo, mas como não sou 'colunista' do imaster vou ver se crio um blog e indico pra voces.

Maurício Vinicius
Maurício Vinicius

Sinceridade...ainda não entendi para que o Flex serve.

Izaque C S
Izaque C S

Desenvolver aplicativos tanto para web como para desktop usando a linguagem que quiser (php, java etc). É mais voltada ao visual mesmo.

Leandro Fernandes
Leandro Fernandes

Eu ainda nem sei pra que serve o flex direito.
Pelo que vejo vai interagir o flash com um dataset assim como asp.net, espero que seja mais produtivo.

Izaque C S
Izaque C S

A facilidade de se trabalhar com Flex é muito grande. Existem muitos componentes prontos para desenvolver aplicações. O flex é uma ferramenta de desenvolvimento como outra, mas pra quem pensa em um visual mais arrojado, escolhe flex. O AS3 esta a altura do Java, com uma ótima API voce desenvolve o que quiser. Não sou defensor do Flex, mas como trabalho com Flex posso dizer o que e como ele é.

Everton Luiz Gomes
Everton Luiz Gomes

Caso eu queira utilizar uma variável de seção ou de formulário, para setar um valor a ser filtrado no SELECT, como eu procedo ?

Izaque C S
Izaque C S

Com php, voce chama uma função do php no flex passando o parametro, na classe php voce cria a função que recebe o parametro e executa a query e retorna uma resposta. essa resposta o flex pega e exibe no componente que quiser do flex.

Fábio Tomio Toyofuku
Fábio Tomio Toyofuku

então, consegui fazer rodar aki... nao tem segredo, é ter uma noção q flui.... valew.. t mais

Gustavo Henrique Carvalho e Silva
Gustavo Henrique Carvalho e Silva

Com o ColdFusion 7.0.2 (da Adobe) veio um pacote de funcionalidades que podem ser integradas ao Flex. Nessa versão tem um Wizard que já monta uma tela mestre-detalhe mole, mole.

andre  luiz encinas
andre luiz encinas

que curso vc indica?, quais livros?....ja pensou em criar um site como o devmedia.com.br, so com video aulas sobre flex ?

Jackson  F. de A. Mafra
Jackson F. de A. Mafra

Pra quem não sabe ainda, ele serve pra desenvolver aplicações, utilizando a Engine o Flash Player 9 (Leia-se AS 3.0) e ele tem uma simplicidade fora do comun....

Manoel  Teixeira de Souza Filho
Manoel Teixeira de Souza Filho

Quais arquivos devo subir para o servidor? Preciso colocar um aplicação na internet.

Renato Arvelos
Renato Arvelos

no meu http://localhost/ULTIMA_TENTATIVA/amfphp/browser/ ta dando esse erro, o que pode ser?

(Object)#0
message = "faultCode:AMFPHP_RUNTIME_ERROR faultString:'mysql_fetch_object(): supplied argument is not a valid MySQL result resource' faultDetail:'C:\xampp\htdocs\ULTIMA_TENTATIVA\amfphp\services\conexao.php on line 17'"
name = "Error"
rootCause = (null)

Renato Arvelos
Renato Arvelos

desculpa foi um erro bobo, nao mudei o nome da tabela no select. FUNCIONOU PERFEITAMENTE, otimo post e muito obrigado

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize