1 - Introdução
Uma das maiores vantagens do uso de Flex é que a aplicação e boa parte do processamento das regras de negócios podem ser feitas no cliente, ou seja, no browser do usuário. Isso faz com que recursos do servidor web sejam poupados consideravelmente.
Contudo, há momentos em que a aplicação Flex precisa obter ou enviar dados ao servidor web. Geralmente isso é feito de forma assíncrona, de modo que o usuário poderá continuar interagindo com a aplicação enquanto requisições são feitas nos bastidores.
Uma das formas mais comuns de acesso ao servidor web por parte de uma aplicação Flex é por meio de RPC (Remote Procedure Call - Chamada Remota de Procedimento). Este artigo aborda a técnica usada para enviar dados informados pelo usuário na aplicação Flex para um programa PHP. O programa PHP, por sua vez, poderá processar os dados recebidos e emitir uma resposta informando o sucesso ou falha da operação.
2 - Descrição do projeto
A aplicação que escreveremos é um sistema simples de login de usuários. O usuário informará o nome de usuário e senha e clicará o botão Acessar. Neste momento a aplicação Flex fará uma chamada remota a um programa PHP enviando o nome de usuário e senha por meio do método POST. Tão logo o programa PHP seja executado, teremos uma janela de mensagem informando se os dados informados estão corretos ou incorretos.
Antes de prosseguirmos, veja abaixo a aplicação Flex totalmente funcional. Experimente informar quaisquer dados e finalmente informe "osmar" como nome de usuário e "arquivo" como senha:
3 - O documento PHP
A melhor forma de realmente entender este projeto, é começando pelo código PHP. Veja a sua simplicidade:
Código para logar_flex.php
Veja que aqui nós testamos os valores das variáveis $usuario e $senha. Se o teste for positivo, apenas escrevemos "sucesso" no documento. Se for negativo, escrevemos "erro". É claro que em uma aplicação do mundo real, o nome de usuário e senha poderiam ser verificados em uma base de dados. O importante aqui é perceber que os dados que estamos escrevendo no documento estarão visíveis à aplicação Flex quando a chamada remota de procedimentos (RPC) retornar.
4 - O documento MXML
Como já sabemos de artigos anteriores, uma aplicação Flex é descrita em um documento do tipo XML chamado MXML. Neste documento podemos descrever o comportamento da aplicação e também adicionar códigos ActionScript. Veja a listagem:
Código para Login.mxml:
Vamos começar analisando os controles usados nesta aplicação:
Veja como definimos os valores "nome" e "senha" para a propriedade id das duas caixas de texto. Ao definir true para a propriedade displayAsPassword da segunda caixa de texto, nós fazemos com que ela se comporte como um campo de senha. Veja que, no evento click do botão, nós fazemos uma chamada ao método send() de um componente chamado login. Vamos analisá-lo agora:
Aqui nós temos um componente do tipo HTTPService, usado para as chamadas remotas de procedimento. Veja como definimos a URL do documento PHP que será chamado, o método a ser usado (POST), a função que será chamada em caso de sucesso, a função que será chamada em caso de falha e a forma de retorno, em nosso caso será texto puro.
Os parámetros para o documento PHP são enviados por meio de um componente request:
Veja que o documento PHP receberá variáveis chamadas usuario e senha e seus valores serão o conteúdo das caixas de texto nome e senha.
Observe agora a função sucesso:
Se a chamada remota ao documento PHP for feita com sucesso, o texto enviado pelo documento PHP (vimos isso lá em cima) será armazenado em event.result. Tudo que temos a fazer é converter esse conteúdo em uma variável do tipo String e efetuar alguns testes:
5 - Hora de compilar e executar
Chegou a hora de compilar e testar. Veja os artigos anteriores se você ainda tiver dificuldades em compilar, executar ou colocar o resultado final em uma página HTML.
Uma advertência: Para que o exemplo funcione corretamente, o documento PHP deverá ser chamado a partir do mesmo domínio em que a aplicação Flex se encontra, ou seja, o Flash Player aplica restrições de acesso quando tentamos efetuar RPC usando domínios diferentes. A mensagem de erro é bem parecida à exibida abaixo: