Screencast: Flex, PHP, AMFPHP e operações CRUD
CRUD significa Create, Retrieve, Update, Delete e são as 4 operações básicas que um sistema faz para administrar dados armazenados em um banco de dados. Tenho certeza que a grande maioria dos iniciantes têm dúvidas sobre como realizar estas operações no Flex, com AMFPHP e foi por isso que aproveitei o bom humor nesta sexta-feira para colocar capricho no screencast deste post.
Este é de longe o maior que já gravei (pouco mais de 1 hora de gravação) e quem chegar ao final ganha um doce! HUAHUAHUAHUAHU
Aproveitei também que fiz as pazes com o mapeamento de objetos e expliquei tintin por tintin. OK, com isso, espero que todas as duvidas sobre a utilização do AMFPHP sejam sanadas.
Um forte abraço,
Ved
Links:





Nao sei nem como agradecer por tanto conteudo.
Parabens Ved e muito obrigdo mesmo.
Esta sendo muito util e ajudando muita gente.
Abs
Fábio,
Parabéns pela iniciativa de compartilhar seus conhecimentos, te acompanho nos sc desde o início, já é obrigatório passar aqui quando ligo o computador, valeu, muito obrigado.
Obs.: Em um futuro, se possível, faça aquele sc de uploads multiplos que te pedi tempos atras, lembra? ainda preciso.
Seus screens estão ficando cada dia melhores.
Parabéns mesmo.
Abraço,
Silva Developer
Excelente!
Estes videos estão sendo de grande ajuda!
Parabens!
Parabens mais uma vez.
Acho que logo logo vc vai ser a lynda.com do brasil.
AiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAiAi
Nossa parabens Ved muito bom mesmo, sem comentarios.
Voce esta sendo minha salvação.
Voce é muito bom mesmo.
Obrigadoooooooooooooooooooooooooooooooooooo
Show de bola, esse negócio de mapeamento é coisa do cão mesmo.
),
Não sei se vai ajudar alguem ou se tem alguma lógica (sou iniciante
mas na minha aplicação so funcionou o mapeamento depois que criei uma função que receba o meu VO tipo assim
public function teste(a:clientesVO):void{
Alert.show(‘teste’);
}
Apesar de não usar a função pra nada ela funciona para fazer o mapeamento funcionar, antes disso so tava pegando os dados do db com getAll e não funcionava.
Sei lah se vai ajudar mas ta ai
Jackson
@Jackson: muito obrigado, cara!
Acabei esquecendo de falar do segundo pulo do gato no mapeamento de objetos: vc deve instancia pelo menos uma vez o VO para que o mapeamento funcione. Assim, basta fazer
var qualquerCoisa:SeuVO;
Pronto… a partir daí funciona!
Uauu…. mais, mais, mais conhecimento…. hauhaua
Boa noite, Vedovelli, primeiramente, meus parabéns pela sua iniciativa, quer dizer, você é um cara sem medo de compartilhar seus conhecimentos, que procura ajudar, aqueles que se dediquem ao aprendizado.
Só queria dizer, que eu sou iniciante em flex, comecei a entender um pouquinho de flex, agora em março deste ano, mas só conseguia me embananar.
Com suas dicas e seus screencasts, posso dizer que estou conseguindo entender o que é RIA e muitos outros conceitos como este que você acabou de nos ensinar, o de mapeamento de objetos.
Por favor, continue contribuindo para o autoconhecimento na web, isto faz de você um herói.
Valeu.
Grande Vedovelli, primeiramente gostaria de te dar os parabéns pela sua obra, e dizer também, que domigo eu também to na água da mardita, ou então não mão do palhaço. Mas enfim, gostaria de saber se há alguma forma de “transformar os dados do e.result em um VO, ainda mais que estou re-fazendo meu projeto de amfphp + flex, graças a sua grande maestria. Desde já agradeço. E se quiser me add no MSN, melhor ainda. Tenho algumas Dúvidas que tenho certeza que vc solucionaria. Vlw T++
Grande Ved,
Estou começando no Flex e aproveitando muito de todas as dicas que você passa !!
Grande abraço.
schonorio
Cara, mto bom mesmo o cast… parabéns…
Só não entendo uma coisa:
Por que você não trabalha com o Eclipse com o plugin do php + plugin do Flex. Iso deixa o desenvolvimento muito mais fácil, e ajuda muito entendermos os tutos, principalmente por ser necessário ter a mesma estrutura de pastas.
Vlw… e mais uma vez meus parabéns pelo tuto…
Grande Ved,
Primeiramente parabéns pelo trabalho, pois está excelente! Consegui tirar muito proveito do material!
Implementei seu exemplo com os arquivos disponibilizados, consigo pegar os dados da base e exibir no Flex, mas quando vou alterar ou salvar um novo, ao clicar no botão gravar, recebo o erro:
Argument 1 passed to Crud::updateItem() must be an instance of dadosVO, array given
C:\xampp\htdocs\amfphp\services\Vedovelli\operacoesCRUD\Crud.php on line 33
Poderia me ajudar????? Abraços e muito obrigado!
Parabéns, grande trabalho. Estou começando agora, porém com material igual ao seu vou aprender rapidinho.
Bom, consegui resolver o problema sozinho afinal! Não sei se é a melhor solução mas creio que muitos vão passar pelo que passei aqui, pois rodei em mais de uma máquina e o erro era o mesmo. Minha função no PHP ficou conforme abaixo:
public function addItem($arrDados){
$dados = new dadosVO();
$dados->cidade = $arrDados['cidade'];
$dados->email = $arrDados['email'];
$dados->estado = $arrDados['estado'];
$db = $this->connection();
$db->Execute(“INSERT INTO crud (email,cidade,estado) VALUES (‘{$dados->email}’,'{$dados->cidade}’,'{$dados->estado}’)”);
$lastid = $db->insert_Id();
$dados->recid = $lastid;
return $dados;
}
public function updateItem($arrDados){
$dados = new dadosVO();
$dados->recid = $arrDados['recid'];
$dados->cidade = $arrDados['cidade'];
$dados->email = $arrDados['email'];
$dados->estado = $arrDados['estado'];
$db = $this->connection();
$db->Execute(“UPDATE crud SET email=’{$dados->email}’, cidade=’{$dados->cidade}’, estado=’{$dados->estado}’ WHERE recid = ‘{$dados->recid}’”);
return $dados;
}
Espero ajudar aos próximos colegas! Abraços, Nogueira.
vlw cara.. muito bom o screencast!
Olá, Vedovelli
Observei um pequeno erro: Depois de excluir o último registro e o DataGrid ficar vazio, se eu tentar gravar um novo registro ele dá um erro de Index out of bounds: -1. Como faço pra corrigir isso?
Outra pergunta é, se um dos meus campo for um DateField, como pego os dados dele pra gravar no banco?
Obrigado.
Olá Vedovelli….
Inspirado pelo meu então colega de trabalho Ebercom da FlexDev
comecei a Estudar flex a algum tempo e seus Screencasts foram de grande ajuda.
com certeza seu trabalho já virou Referencia p\ todos os programador PHP e Flex.
A algumas Semanas a Zend lançou a versão 1.7 do Zend Framework
Agora Com Suporte ao protocolo AMF..
Então Resolvi experimentar e fiz uma versão desse projeto usando o Zend 1.3 como back-end.
O Zend_AMF facilita bastante o mapeamento de objetos e parece uma ótima opção p\ quem quer um php um pouco + poderoso..
O Link p\ Download é Esse :
http://www.2shared.com/file/4402448/83817443/ZendFlex.html
Se alguem tiver problemas p\ baixar
ou alguma duvida meu email é esse : fabinhotbn@yahoo.com.br
Abraço a todos
Olá Ved…. Tudo Bem!!!
Antes de mais nada gostaria de parabenizar pelo seu blog,,,, pois está sendo de grande valia… continue assim… obrigado….
Seguinte, estou com um probleminha no exemplo CRUD, que tu disponibilizou…
Quando excluo um registro e logo em seguida tento adicionar um novo registro, apresenta o seguinte erro:
RangeError: Index ‘-1′ specified is out of bounds.
at mx.collections::ListCollectionView/setItemAt()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:446]
at main/atualizarResult()[C:\wamp20c\www\exemploCRUD\src\main.mxml:105]
at mx.rpc::Responder/result()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:43]
at mx.rpc::AsyncToken/http://www.adobe.com/2006/flex/mx/internal::applyResult()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncToken.as:199]
at mx.rpc.events::ResultEvent/http://www.adobe.com/2006/flex/mx/internal::callTokenResponders()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\events\ResultEvent.as:172]
at mx.rpc::AbstractOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractOperation.as:193]
at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:193]
at mx.rpc::Responder/result()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:43]
at mx.rpc::AsyncRequest/acknowledge()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
at NetConnectionMessageResponder/resultHandler()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\channels\NetConnectionChannel.as:515]
at mx.messaging::MessageResponder/result()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\MessageResponder.as:199]
Poderia me ajudar???
Abraços,
Alessandro estou com o mesmo problema que o seu, conseguiu resolver?
Guilherme,,,, já procurei na net…. mas até agora nao achei nada…. nao consegui resolver….
Se eu achar algo eu te aviso….
Blz Alessandro, valeu. Jah mandei email pro Vedovelli, mas nao respondeu, tenta mandar vc tbm vai q ele responde uahauhaua.
Po, Vedovelli, respode a gente aih!!
farowzz
E ai Vedovelli vc tem sido muito util para os iniciantes em flex
adorei esse screencast mas ja ia te chigando por não ter avisao que vc tava usando o adodb eu nem sabia o que era isso ai decidi procurar na net e acabei descobrindo mais uma ferramento util para usar nos meus projetos graças a vc.
valeu cara..
Ved~
eu mudo a uri endpoit p/ o o meu endereço..
na hora que executo, ele da erro exibindo o endereço antigo.
no caso seria aquele seu //localhost:8080~ talz.
o que ta acontecendo…
eu jah alterei o endereço, o flex não puxa o endereço novo =\
abrass
se caso eu tenha que fazer um select de mais de uma tabela do banco!
pq o flex não me responde nada ???
não é possivel isso?
muito fera seu trabalho e sua iniciativa…
sou embriao ainda no mundo (desenvolvimento web).
com tutorias assim ajuda muito.
moro numa cidade de 2.000 habitantes so tem curso de informatica affff.
Olá,
a minha dúvida é de iniciante. Baixei os screencasts sobre CRUD e não consigo assistir no meu PC, o player (vversão 10) está instalado, qual será o problema?
Cara, simplesmente fantastico…
Estou me iniciando agora no flex e trabalhos como o seu permitem que possa continuar aprendendo.
Seu trabalho é muito bom mesmo.
Obrigado.
Olá, está com erro na aplicacção, falta o arquivo adodb.inc.php
linha 2 do Crud.php
include_once ‘../../adodb/adodb.inc.php’;
Obrigado.
Simplismente perfeito…
muito obrigado pelo exemplo. Virei seu fã cara…
=D
Mto bom o screencast.
Como é o primeiro site que aparece quando se pesquisa no Google sobre:
Argument passed to must be an instance of array given amfphp
Vou usar isso aqui para fazer uma utilizade pública.
Não sei se já corrigiram na versão mais nova do AMFPHP, mas tem um Bug na versão que comecei a utiliza no Gateway.php quando utilizado em Plataforma Windows que é nas linhas que contem:
$path = realpath($value . ‘/’) . ‘/’;
essas barras são para UNIX, só trocar por:
$path = realpath($value . ‘\\’) . ‘\\’;
Espero ter ajudado.
Abraço
Bom dia Ved, cara a dois dias iniciei alguns trabalho com flex (apenas telas de sistemas para a empresa onde trabalho, nada de programação forte ainda…).
Esses trabalho são muitos favorecidos para o pessoal que está iniciando como eu e muito tempo procurava por um material assim como esse sc… vai ser de grade ajuda…
Parabens pelo trabalho e por compartilhar seus conhecimentos.
Um abraço.
fwl….
olá vedovelli otimo tutorial, so nao achei uma chamada q vc faz
include_once ‘../../adodb/adodb.inc.php’; no arquivo crud.php, pois baixei o fonte e nao achei esta estrutura…abs
Olá Fabio…estou com o seguinte erro do caminho do gateway:
Channel.Connect.Failed error NetConnection.Call.BadVersion: : url: ‘http://localhost/source/source/amfphp/gateway.php’
Alguem ai ja conseguiu resolver?
Eu não entendi porque no SQL você fez isso ‘”{$obj->campo}”‘ porque usar o { e } no PHP?
@george
Não sou o Fábio, mas vou tentar ajudar: Pode ser que seu PHP esteja com erro de sintaxe. Abra o endereço, ou pode ser que e o endereço do gateway esteja errado no service-config.xml
Cara, valeu, vou dar uma olhada nisso.
Cara só quero agradecer pelo ótimo material que vc colocou na net. Foi muito bom e me fez dar um salto no meu aprendizado em flex.
Argument 1 passed to Crud::updateItem() must be an instance of dadosVO, array given
Pra quem esta ou estava com este erro, eu quebrei a cabeça pra resolvê-lo. Descobri que o flex está passando um array para o php e nao um objeto. Ai o que fiz foi convertêlo para um objeto, como o nosso amigo Nogueira fez lá em cima.
public function updateItem($arr) {
$dados = new dadosVO();
foreach ($arr as $key => $value)
{
$dados->$key = $value;
} …
Ved, teus screencasts tem ajudado bastante a entender o flex e como as coisas funcionam, logo posto um projeto meu pra ti avaliar como está ficando, hehe, sem querer ser chato. Obrigado pelos conteúdos, são de primeira qualidade.
Abs.
Parabéns!
Felomenal!!
espero que vc estaja sempre de bom humor para postar sempres bons videos como esse
abraço
Quando eu crio a variavel remote e chamo o getInstance(); e rodo minha aplicacão os componentes não aparecem, quando tiro essa linha eles aparecem.
Abs e obrigado pelos screencast