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:
//debug, nao necessário
error_reporting(E_ALL | E_STRICT);
ini_set("display_errors", "on");
//importa o server, servidor ZendAMF e de seguida importa a nossa class (serviço no amfPHP) TutorialZend
require_once "Zend/Amf/Server.php";
require_once "TutorialZend.php";
//inicia o servidor e de seguida indica que a nossa class TutorialZend deve fazer parte do zendAMF para serializar
$server = new Zend_Amf_Server();
$server->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:
define("DATABASE_SERVER", "localhost");
//definam a vossa password e nome de utilizador
define("DATABASE_USERNAME", "username");
define("DATABASE_PASSWORD", "password");
define("DATABASE_NAME", "zend");
class TutorialZend {
//esta é uma das diferenças entre amfPHP e o zendAMF, aqui é usado o __construct() em vez do nome da class, TutorialZend().
public function __construct() {
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
mysql_select_db(DATABASE_NAME);
}
//função para buscar os dados à bd mysql.
public function getUsers() {
$query = "SELECT id, nome, email FROM users";
$result = mysql_query($query);
$res = array();
while ($row = mysql_fetch_assoc($result)) {
array_push($res, $row);
}
mysql_free_result($result);
return $res;
}
}
?>
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:
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:
<services-config>
<services>
<service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="zend">
<channels>
<channel ref="my-zend"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-zend" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost/flex/testZend/" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
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:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private function testZendIt():void {
myZendService.getUsers();
}
private function onResultado(res:ResultEvent):void {
var objRes:Object = res.result as Object;
myZendGrid.dataProvider=objRes;
}
private function onErro(erro:FaultEvent):void {
Alert.show(erro.toString());
}
]]>
</mx:Script>
<mx:RemoteObject id="myZendService" destination="zend" source="TutorialZend" >
<mx:method name="getUsers" result="onResultado(event)" fault="onErro(event)" />
</mx:RemoteObject>
<mx:Canvas width="344" height="254" borderColor="#FFFFFF" backgroundColor="#FFFFFF" horizontalCenter="0" verticalCenter="0">
<mx:Button x="20" y="19" label="Call Zend" click="testZendIt();" width="302"/>
<mx:DataGrid x="20" y="49" id="myZendGrid">
<mx:columns>
<mx:DataGridColumn headerText="Id" dataField="id"/>
<mx:DataGridColumn headerText="Nome" dataField="nome"/>
<mx:DataGridColumn headerText="Email" dataField="email"/>
</mx:columns>
</mx:DataGrid>
<mx:Image x="20" y="208" source="PoweredBy_ZF_4LightBG.png"/>
<mx:Label x="217" y="199" text="ZEND AMF Tutorial"/>
<mx:Label x="194" y="215" text="www.msdevstudio.com"/>
</mx:Canvas>
</mx:Application>

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.




58 Comentários
Muito boa essa notícia, visto que quanto mais tecnologia nova, melhor nossas experiência com o Flex. parabens pela materia… testarei logo..
Typo detectado
“… o amfphp não usa e nem sequer traz este gateway, pelo que teremos de o criar.”
Ali querias dizer zendamf
Oswaldo, depois mande um comentário contado a sua experiencia!
Marco, gracias! Corrigido
Abraços.
@Mário: Bom dia, quanto as minhas experiência, creio ser mínima, em relação a vocês, fazem 6 meses que trabalho com flex, mais graças a blogs como o seu, do Ved, entre outros, nos dão bastante suporte.JA tenho dois trabalhos realizados com Flex. E pretendo realizar mais…
Agradeço.. abraço…e claro, parabéns pelo blog… esta inscritos em meus RSS
Estou com problemas em implementar o exemplo, quando chamo o botão Call Zend, ele retorna o 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=”704CEAE6-4F79-79D1-C2F7-438698B7B27B” type=”fault” bubbles=false cancelable=true eventPhase=2].
Se puderem me ajudar, pois sou iniciante e não estou conseguindo encontrar onde é o erro.
Boas Andre, pelo que parece é o teu php que está mal construido… abre o teu TutorialZend.php no browser e ve se dá erro… provavelmente deve haver algum erro…copias-te o código à mão? ou usaste o ficheiro que dei?
Se copiaste o código à mão, pode ser da formatação aqui do texto no blog, que troca os ” por ” que sao caracteres diferentes aos olhos do php
Ve se resolveu.. caso contrario usa o ficheiro que puz pra download.
Abraço.
Realmente eram códigos errados na hora de copiar e colar, problemas de iniciante.
Mas parabéns pelo ótimo site e as dicas e novidades sempre nos dão mais animo para continuar.
po: gostei demais da parte de mapeamento de objetos, pois no AMFPHP é um parto e nem sempre funciona! Abração e obrigado por mais essa! Ved
Me ajude amigo. Quando eu testo, está aparecendo este ERRO para mim:
[FaultEvent fault=[RPC Fault faultString="[MessagingError message='Destination 'zend' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']” faultCode=”InvokeFailed” faultDetail=”Couldn’t establish a connection to ‘zend’”] messageId=”E2F45E60-8616-9D24-8730-7BC83363609C” type=”fault” bubbles=false cancelable=true eventPhase=2]
Segui todos seus passos.
Obrigado
Eduardo Burko
Eduardo, você definiu o seu services-config.xml e colocou-o como aditional compiler arguments?? Tudo indica que nao o fez…
será disso?
Cumps.
Mario… realmente faltava colocar os novos ARGUMENTOS. Porém agora esta dando outro erro.
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Security.Error error Error #2048 url: 'http://www.msdevstudio.com/blog/flexSource/testZend/'"] messageId=”53018C8C-AF46-704A-2C34-7C13AAA9A4C8″ type=”fault” bubbles=false cancelable=true eventPhase=2]
Obrigado pela sua atenção.
Eduardo
Eduardo, como pode ver está qualquer coisa mal no URL do remoteObject, pelo que parece você tem o endereço do meu blog (deveria se o do seu/ sua localização.) Siga as instruções deste post e nao use as fontes do meu exemplo porque estas estão configuradas para o meu servidor… assim é mais facil testar e aprender o seu funcionamento.
Mario… eu mudei ali para chamar no meu LOCALHOST no server-config, porém ainda dá um erro estranho.
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Security.Error error Error #2048: Violação da área de segurança: http://localhost/flex/testZend/bin-debug/testZend.swf não pode carregar dados de http://www.msdevstudio.com/blog/flexSource/testZend/. url: 'http://www.msdevstudio.com/blog/flexSource/testZend/'"] messageId=”D5C0786C-0906-F95E-B4AE-7C1E2C3C584D” type=”fault” bubbles=false cancelable=true eventPhase=2]
Não sei se isso tem haver Mario, porém meu FLEX está criando o HTML e o SWF dentro de uma pasta chamada bin-debug. Será que pode ser isso ??
Eduardo, o seu services-config.xml continua com o endereço do meu blog. Deve alterar o seu services-config.xml e voltar a compilar a aplicação (um refresh nao chega).
Em alguma parte continua com a referencia do meu blog.
Mario… funcionou agora… Bastava eu FECHAR o FLEX novamente e abrir. Porém gostaria de tirar duas dúvidas com você do começo deste TUTORIAL.
1º – Tem uma parte lá em cima, onde colocamos WEB ROOT e ROOT URL, lembra ?? porém antes desta tela tem uma parte onde tenho que escolher o tipo de linguagem (escolhemos PHP), e tem uma parte chamado PROJECT LOCATION. Nesta parte do PROJECT LOCATION, você deixa ali marcado o PADRÂO que o FLEX deixa ?? Ou escolhe a mesma pasta nossa lá no WWW ??
2º – Tem um botão logo abaixo do WEB ROOT e ROOT URL chamado VALIDADE CONECTION, quando eu aperto este botão ele me dá uma mensagem ali em cima assim: Cannot access the web server. The server may not be running, or the web root folder or root URL may be invalid. É assim mesmo ??
Obrigado mais uma vez.
Eduardo BUrko
Estava a achar estranho nao funcionar
Como disse:
“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.
Se clica em Validate Configuration e dá erro, algo se passsa, deveria dizer Web root & root url are valid! Verifique se as pastas estao correctas e se o seu servidor web esta a correr.
E pronto, acho que é tudo! qq coisa disponha do fórum do blog: http://forum.msdevstudio.com
Abraço.
Mario… para fechar a minha dúvida sobre este exeplo, me diz uma coisa… como eu faço para acessar apenas o LOGIN do objeto objRes ??
Tentei assim mas não funcionou…
var objRes:Object = res.result as Object;
var login:String = objRes.login;
Obrigado mais uma vez.
Gostaria de fazer um crítica.
Mario, o tutorial funcionou perfeitamente. Tive uma noção do que é o ZendAMF mas sinto que aprendi muito pouco.
Pois para mim foi só um processo de copiar e colar e ver que funciona mas não sabia muito bem o que eu estava fazendo.
Eu sou um usuário principiante de Flash/Flex, nunca fiz nada integrado com php, talvez seja por isso que esteja tendo tanta dificuldade.
Mário, parabéns o tutorial me ajudou a dar os primeiros passo no ZendAMF, e pelo que andei lendo, acho que vou “ficar” com ele devido ao apoio da Adobe.
Eduardo,
O login?? mas na tabela nao existe qualquer campo login, pelo que nao existe no res.result…
Se alterou a sua tabela e meteu mais um campo, no php deve colocar:
$query = “SELECT * FROM users”;
E assim todos os campos ficam disponiveis no flex na variavel evt.result.
Bruno.
O zendAMF funciona como o amfPHP (quase) pelo que aconselho a dar uma vista de olhos no meu tutorial de flex que explica passo a passo como funciona o amfphp e a integração com o flex, veja:
http://msdevstudio.com/blog/2008/06/30/adobe-flex-a-partir-do-zero-livro-actualizado/
pontos 9.x
Aí verá que será mais facil entender estes sistemas de comunicação remota via AMF.
ocxy, bem verdade que têm apoio da adobe, mas agora depois de algum tempo receio que para os iniciantes e sem muita experiencia no php seja dificil usa-lo já que não têm um explorer como o amfphp onde podes ver os erros do php, no zendAMF simplesmente não consegues saber o erro e deves ter muito cuidado a fazer uma programação php sem erros ou então podes passar horas a tentar descobrir por exemplo que não tinhas um simples ; (ponto e virgula) no sitio certo.
Mas espero brevemente que seja feito um explorer para que esta detecção de erros seja mais facil. Actualmente uso zendAMF mas o amfPHP ainda não foi ultrapassado nesse ponto de deteção de erros server/language side.
Cumps e abraços a todos.
Mário, obrigado pela dica. Vou ler.
Olá Mário, essa parte eu já dominei, inclusive juntei o Flex + Lumine + ZendAMF, tudo certinho, agora estou esperando a parte do mapeamento rsssss. tentei a documentação mas lá explica muito pouco, não sei se é pq é simples mesmo, mas estou um pouco perdido nas estruturas das pastas, vc sabe se é como no AMFPHP, manter a mesma estrutura nos dois lados?
Luis Carlos, o mapeamento é muito simples mesmo, não necessita de qualquer estrutura de pastas, nem no flex, nem no php, pode usar directo:
$server->setClassMap(“VOUser”, “VOUser”);
e no flex meter o RemoteClass alias apenas como VOUser
[RemoteClass(alias="VOUser")]
Não necessita de caminhos, nem de estruturas de pastas iguais nem no flex nem no php, aqui é que as coisas simplificaram muito!
no php pode ser meus.vos.VOUser e no flex pode ser meus.remote.alias.users.VOUser
cumps.
é tão simples como isso, a documentação ainda está fraca, mas também é por ser simples mesmo!
vou perturbar vc mais um pouquinho, e no caso eu usando o
$server->setClassMap(”VOUser”, “VOUser”);
preciso ter o $_explicitType na classe VOUser do PHP?
e o $server->setClassMap() eu coloco no meu gateway, onde eu seto as classes, tipo assim:
$server = new Zend_Amf_Server();
$server->setClassMap(‘LinksVO’, ‘LinksVO’);
$server->setClass(‘Link’);
echo $server->handle();
Finalmente consegui mapear… usando o PHP, Lumine e Flex ufa!!!!!
Mario… lá no nosso arquvo services_config.xml… onde eu mudo para ao invés do meu arquivo ser INDEX.PHP digamos que eu mude para INDEX_ZEND.PHP.
Pois como vou usar um site junto com o FLEX… preciso usar o INDEX.PHP para colocar o SWF do meu site.
Thanks…
basta mudares:
endpoint uri=”http://localhost/flex/testZend/”
para:
endpoint uri=”http://localhost/flex/testZend/INDEX_ZEND.PHP”
Obrigado pelo que vc tem feito para nos ajudar a entender muita coisa sobre o flex.
Eu gostaria que vc mostrasse um emplo de GRUD com o zendAmf.
Grato
Fiz exatamente como está descrito no exemplo. Funcionou no meu notebook, mas não funcinou no servidor de desenvolvimento. Estou rcebendo a mensagem abaixo, o que poderia ser? Grato.
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost/flex/testZend/'"] messageId=”A1C1116E-97D1-8570-B10F-125338FD2CB6″ type=”fault” bubbles=false cancelable=true eventPhase=2]
Quando tento acessar o site de outra máquina da rede, tenho como retorno o seguinte erro:
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Security.Error error Error #2048 url: 'http://localhost/flex/testZend/'"] messageId=”0CC04575-75C6-3147-0940-5E216EC2A270″ type=”fault” bubbles=false cancelable=true eventPhase=2]
O que pode ser?
Marcio, no servidor de desenvolvimento deve antes de tudo alterar o services-config.xml colocando o seu endpoint uri=”enderecodosite.com/zendAmf/gateway.php” onde deve indicar as suas definições, depois compile de novo o projecto no flex e agora sim ele está pronto para colocar online.
Douglas, o mesmo erro:
Deve colocar no gateway o endereço da maquida de destino:
url: ‘http://localhost/flex/testZend/’ -> Deve colocar sempre no services-config o endereço da maquina, como o projecto está compilado para o localhost em cada maquina que abrir o projecto ele vai estar procurando na sua propria maquina a pasta flex, coisa que nao existe…
Faça o emso processo que indiquei em cima.
Abraços.
Mário,
Eu baixei os arquivos do seu blog, mudei o services-config e mesmo assim tenho o seguinte erro:
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 405: url: 'http://localhost/FlexProjects/testZend/'"] messageId=”99A620B3-3E91-F824-B763-AC396C87EA6C” type=”fault” bubbles=false cancelable=true eventPhase=2]
Pode me ajudar?
Obrigado!
você consegue aceder ao index.php na sua pasta http://localhost/FlexProjects/testZend/index.php ??
Veja se consegue e se dá algum erro…
Abraço.
Quando chamo no browser a URL http://localhost/FlexProjects/testZend/index.php, ele entende que é um arquivo para download.
Grato
Isso quer dizer ou que o seu .php está mal escrito, ou que o servidor web não está a “entender” os ficheiros php e por isso não os processa…
Verifique o seu php, e veja se o seu servidor abre um qualquer outro ficheiro php… cumps.
Mário,
Eu coloquei o phpinfo na mesma pasta do projeto e funcionou normalmente. Existe alguma alteração que eu tenha que fazer no php.ini para funcionar?
Abraço
Mário,
Eu reescrevi o código e quando chamo a URL pelo browser printa “Zend Amf Endpoint
“, contudo ainda recebo uma mensagem de erro:
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Security.Error error Error #2048 url: 'http://localhost/FlexProjects/testZend/'"] messageId=”416C1C4E-C1D7-359C-F892-B14D25696A7C” type=”fault” bubbles=false cancelable=true eventPhase=2]
Obrigado!
Mário,
Eu percebi que, quando eu chamo o projeto pelo endereço físico, funciona; porém, se chamo pela url o Flex me retorna o erro acima.
Você saberia me dizer onde eu acerto isso?
Grato mais uma vez,
Loureiro
Você vai abordar questões como CRUD utilizando o ZendAMF?
Oi Flávio, sim… futuramente tenciono falar um pouco de operações CRUD com o ZendAMF.
Abraço.
Sr(a), quando executo a index.php ele me apresenta a seguinte menssagem:
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 40
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 40
Alguem pode me dizer o por que ?
Rsssssss, tentei fazer seu exemplo, mas n consegui, deu um erro que n tem nada haver no meu php la no require_once “Zend/Amf/Server.php”;
quando achama essa função:
/** Zend_Loader_PluginLoader */
require_once ‘Zend/Loader/PluginLoader.php’;
realmente eu olhei e n existe essa pasta Loader/
mas existe um arquivo chamado loader.php
e tmb n existe o require_once ‘Zend/Auth.php’;
rssssssss, Melhor desistir de aprender Flex, primeiro exemplo e ja uma brinca dessas, rsssssss
Bom mas no mas, muito bom o BLOG – Parabens
Mauricio B. De Biasi
Mesmo erro que o meu, rssssssssss, vamos resolver isso juntos, creio quebaixamos uma versão do ZEND diferente que n vem com esses arquivos…
vamos esperra uma resposta dos experts
Renyer, é verdade, pelo que estava vendo o Mário criou esse tutorial baseado no ZendAMF 1.7.3 e estamos ja na versão 1.9 tente realizar o tutorial com a versão de exemplo (1.7.3) e deu o mesmo erro… rsrs
Mario tem algo a acrecentar ?
Eu tentei mas não deu. Eu já fui ver o código PHP para ver se tinha erro e nada, até no index.php chamei a função para recuperar dados e funcionou. O service-config.xml támbém funcionou, fui ver no Firefox 3.5 pelo Firebug e ele diz que a página retornou o código 301 ‘Movida permanentemente’
Dá esse erro:
[FaultEvent fault=[RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.BadVersion: : url: 'http://localhost/ZendAmf/app'"] messageId=”570C458E-D9FC-9BC9-E2B4-B02C6222772B” type=”fault” bubbles=false cancelable=true eventPhase=2]
Problema resolvido, no ‘gateway’ deveria ser colocado index.php e não só o endereço. =D
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…
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
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]
——————————————————————
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…
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
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
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.
Parabéns pelo post. Excelente didática. Fiz aqui e, deu certinho!!!
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
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
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