ZendAMF – Novidade, analise (vs amfPHP) e tutorial

ZendAMF – Novidade, analise (vs amfPHP) e tutorial


Este é o mais recente logo de uma das frameworks de php mais conceituadas da actualidade. Não vou falar da framework apesar desta ter muito que falar, mas vou falar sim de um componente AMF desta nova framework intitulado ZendAMF, que como o amfPHP serve para comunicação de dados do PHP com a plataforma Flash.
Tudo isto deve-se à politica de globalização da plataforma flash por parte da Adobe, que abriu o formato AMF para a comunidade. Nas bastando isso, a adobe ainda se aliou à Zend e junto com um dos autores do amfPHP – (Wade Arnold) – desenvolveram uma aliaça conjunta que resultou no Zend AMF que depois de ter passado do papel veio a publico com o seu download disponibilizado oficialmente na pagina da zend.

 

Apesar de a minha primeira impressão ter sido absurdamente rude (não gostei do impacto de tanta pasta no ficheiro de download) depois de apenas uns minutos de volta do sistema reparei que o seu uso ainda é mais simples que o amfPHP, e pelas experiencias que fiz parece ser mais rápido que o amfPHP, nao esquecendo também a necessidade absoluta do PHP5.

 

Apenas vasculhei os ficheiros o suficiente para vos demonstrar o simples uso no flex deste novo ZendAMF.

Vamos então a um pequeno tutorial… 

- O primeiro passo é fazer o download do zendAMF.

- De seguida, ter um servidor *AMP:  Apache + MySQL + PHP (5)

- Finalmente seguir os passos seguintes atentamente:

Antes de configurar as minhas pastas, vou explicar o meu sistema: Tenho o WAMP Server instalado na pasta C:\wamp, com o domain “localhost” e a raiz do servidor em c:\wamp\www 

Vou então à minha pasta do www e crio uma pasta flex e dentro dela um testTend ficando com os caminhos: c:\wamp\www\flex\testZend

Abram o arquivo que fizeram download : ZendAMF-1.7.3.zip percorram a pasta library/ e extraiam apenas a pasta Zend para c:\wamp\www\flex\testZend. Esta é a pasta necessaria ao funcionamento do zendAMF, como se fosse a pasta “amfphp” do amfPHP. Vou agora explicar o funcionamento deste zendAMF, que ao contrario do amfPHP não possui uma estrutura obrigatória de pastas, mas para que ele funcione devidamente teremos que providenciar alguns detalhes como um gateway e uma classe.

O conhecido amfPHP usa um ficheiro gateway.php para definir as classes e estruturas de dados e que regra geral nao temos que mexer nele, o zendAMF não usa e nem sequer traz este gateway.php, mas teremos de criar um ficheiro que funciona +- da mesma maneira. Para isso criem um ficheiro index.php (será o nosso gateway) e dentro dele coloquem o código seguinte:

 


setClass(“TutorialZend”);

//necessário para que o flex/flash identifique o endPoint.
echo($server->handle());
?>

Este é o nosso gateway, onde importo a minha primeira class: require_once “TutorialZend.php”; e onde digo ao “Servidor AMF” que deve usa-la: $server->setClass(“TutorialZend”);

Para mais que uma class basta usarem repetidamente os comandos, require_once “minha_classe_2.php”; e $server->setClass(“minha_class_2″); ficando também estas acessiveis no zendAMF para remoting.

Guardem o ficheiro como index.php na pasta: c:\wamp\www\flex\testZend\ e vamos agora criar a nossa primeira classe, que aqui sim funciona como no amfPHP, neste caso criar a class necessária ao gateway, a classe TutorialZend (.php) criando entao o ficheiro TutoriaZend.php onde vamos escrever uma função para ir buscar dados a uma tabela users, escrevendo o seguinte:


 

 

E temos a nossa class feita. Só fica mesmo a faltar a nossa base de dados zend e a nossa tabela users, para isso criem a base de dados zend e executem a seguinte instrução:


CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL auto_increment, `nome` varchar(255) NOT NULL, `email` varchar(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `users` (`id`, `nome`, `email`) VALUES (1, ‘Mario’, ‘admin@msdevstudio.com’), (2, ‘Ze carlos’, ‘zecarlos@sic.pt’), (3, ‘Antonio’, ‘antoni@rail-uk.com’), (4, ‘Sousa’, ‘sfranco@spo.pt’);

E pronto, temos a tabela users já com dados… só falta mesmo ligar o flex ao nosso zend.

 

No flex basta criarem um novo projecto,

File->New->Flex Project colocando o nome testZend escolhendo como server type : PHP, clicando em seguinte basta introduzir as cordenadas que usei em cima:

Web Root: C:\wamp\www\flex\testZend e Web Root URL: http://localhost/flex/testZend cliquem em Validate Configuration e depois em Finish.

O projecto está criado, e para que o flex se ligue ao zend AMF é necessário também um ficheiro services-config.xml o qual podem encontrar em baixo e onde definimos o nosso gateway, neste caso o index.php podendo ou nao enumera-lo:

 








*








 

Salvem o arquivo services-config.xml na pasta src ao lado do zendTest.mxml

Finalmente, coloquem-no como argumento na compilação, indo ao menu Project->Properties->Flex Compiler->Aditional compiler arguments, colocando  -locale en_US -services “services-config.xml” cliquem em Apply e o nosso projecto esta pronto a trabalhar com o zendAMF, basta usarem o código normal no amfPHP como remoteObject, mas definindo o destination como zend. Vejam o segunte código testZend.mxml:

 





















Basta correm-no e clicar no botão “Call Zend” para a vossa tabela ser preenchida com os dados do mysql vindos directinhos no php via ZendAMF como mostra a imagem em baixo :)
testZend; ZendAMF Tutorial
Simples hein?

Uma das grandes vantagens do uso do zendAMF é a possibilidade de mapear VO’s directamente na class Servidor, usando apenas: $server->setClassMap(“VOUser”, “VOUser”); ($server->setClassMap(“AS3Classe” , “PHPClasse”);) mas isso fica para a próxima.

Podem ver o projecto final online aqui, fazer o download do projecto aqui, o download do gateway: index.php e da classe TutorialZend.php.

Espero que seja util, e já agora contem as vossas experiencias… será que é um substituto à altura do amfPHP ?

 

Na minha opinião pessoal acho o zendAMF menos pesado, mais rapido e até mais simples de usar visto que podemos definir a estrutura de dados e classes… mas bom, ainda só estudei um pouco… brevemente darei mais noticias….

Abraço.


61 comments

add yours
  • Renyer July 28, 2009

    Mauricio B. De Biasi, blz?

    E ai conseguiu resolver o problema por ai? Creio que o Mario deve estar muito oculpado pra poder nos auxiliar, vo voltar a pegar nesse tutorial essa semana, to meio corrido aqui, mas dessa semana não passa, qualquer coisa eu posto aqui o resultado, abraço…

  • Mauricio B. De Biasi July 28, 2009

    Flavio, bom dia, Qual vs vc usou do ZendAMF ? quando vc fala em ‘gateway’ vc esta falando do XML ? pois me parece que o ZendAMF não tem gateway….

    Abs

  • Mauricio B. De Biasi July 28, 2009

    Coloquei no xml: endpoint uri=”http://localhost/flex/testZend/index.php” e tbm não funcionou ultilizei a vs 1.7.3 do zendAMF e continuo com o mesmo erro :

    ————————————–
    [FaultEvent fault=[RPC Fault faultString=”Send failed” faultCode=”Client.Error.MessageSend” faultDetail=”Channel.Connect.Failed error NetConnection.Call.BadVersion: : url: ‘http://localhost/flex/testZend/index.php'”] messageId=”01999CE1-0E64-5C03-2879-C178DF6E6461″ type=”fault” bubbles=false cancelable=true eventPhase=2]
    ——————————————————————

  • Renyer July 28, 2009

    Pessoal, me tirem uma duvida estou tentando colocar esse tuto ai pra rodar, mas nada ate agora…

    Bom a duvida é o seguinte;

    meus ficheiros de .PHP

    não fecham a tag

    estão todos assim;

    <?php

    será isso que n esta funcionando?
    o arquivo que vcs baixaram estão da mesma forma?

    o coisa dificil…

  • Mauricio B. De Biasi August 3, 2009

    Renyer,

    Que eu saiba as tag de inicio e fim são obrigatorias:
    Ex:

    Com relação ao ZendAMF não tive sucesso ate agora…

    Abs
    Mauricio

  • Thiago August 3, 2009

    Opa,

    eu estava com o mesmo problema que o Reyner
    “Fatal error: require_once() [function.require]: Failed opening required ‘Zend/Loader/PluginLoader.php’ “,
    mas parece que no arquivo baixado no site da Zend na versão 1.9 não tem esses arquivos, daí eu baixei o zend_framework e copiei os arquivos que estavam faltando e colei na pasta que está o zendamf.
    Não sei se é a solução correta, mas funcionou

    Abs

  • Rafael August 28, 2009

    Olá pessoal!
    não sei se todos conseguiram revolver o problema em relação ao erro que estava acontecendo ao tentar acessar o arquivo index.php mas a solução é baixar o zend framework e não o zend amf, pelo menos foi fazendo essa alteração que começou a funcionar corretamente. O endereço seria o seguinte:
    http://framework.zend.com/download/latest
    no final tem o link para poder baixar, eu baixei a versão 1.9.2 e tá ok.

    Abraço.

  • Neto October 28, 2009

    Parabéns pelo post. Excelente didática. Fiz aqui e, deu certinho!!!

  • Fernando November 24, 2009

    Yo tengo dos domain, uno .com y otro .com.ar. Si compilo para .com y entro por .com.ar obtengo un 2048, al igual que vi comentado. Como hago para que funcione tanto para .com como para .com.ar?

    I have 2 domains, one .com and another .com.ar. If I compile the app with an endpont with .com, I cannot access through .com.ar. Does anyone know a solution to this?

    Thanks in advance

  • Ronaldo November 29, 2009

    Muito boa introdução ao Zend AMF!
    Tenho utilizado amfphp mas o Zend AMF já suporta php5 e tem um futuro promissor com a parceria Adobe-Zend, por isso a escolha é fácil.
    No amfphp o service browser ajuda rapidamente a testar o php do servidor, espero que o zend amf venha a ter essa funcionalidade.

    Abraço

  • Nelson December 28, 2009

    uso wamp php 5.3 – ZendAMF ultima versao – 27/12/09
    Quando acesso o index.php “http://localhost/flex/testZend/index.php” resulta no seguinte erro:
    Warning: require_once(Zend/Loader/PluginLoader.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\flex\testZend\Zend\Amf\Server.php on line 41

    Fatal error: require_once() [function.require]: Failed opening required ‘Zend/Loader/PluginLoader.php’ (include_path=’.;C:\php5\pear’) in C:\wamp\www\flex\testZend\Zend\Amf\Server.php on line 41

    Quando peço para executar usando o FLEX resulta no seguinte erro:
    [FaultEvent fault=[RPC Fault faultString=”Send failed” faultCode=”Client.Error.MessageSend” faultDetail=”Channel.Connect.Failed error NetConnection.Call.BadVersion: : url: ‘http://localhost/flex/testZend/'”] messageId=”6E923904-1B04-C4A3-217D-D33435F00CE8″ type=”fault” bubbles=false cancelable=true eventPhase=2]

    Já refiz varias vezes e acabo chegando no mesmo erro,
    vc tem alguma ideia do que pode ser

Leave a Comment

Post