rys89 Posted June 7, 2014 at 05:53 PM Report #558570 Posted June 7, 2014 at 05:53 PM Boas, Tenho de desenvolver uma aplicação Android, que insere e recupera os dados através de um servidor web (php, framework symfony) Estou com vários problemas, um precisava mesmo de um tutorial que me ajuda-se a perceber como envio e recebo os dados um dos problemas é que eu no meu servidor web utilizo o seguinte código $manager = $this->getDoctrine()->getManager(); $compte = $manager->getRepository('ProjectSocialBundle:Compte')->find($id); $encoders = array(new XmlEncoder(), new JsonEncoder()); $normalizers = array(new GetSetMethodNormalizer()); $serializer = new Serializer($normalizers, $encoders); $resultado[]=$serializer->serialize($compte, 'json'); $response = new \Symfony\Component\HttpFoundation\Response(json_encode($resultado)); $response->headers->set('Content-Type', 'application/json'); return $response; mas envia os dados desta forma: \"contacto\": \"12131231\", \"nome\": \"adsad\", \"morada\": \"1d dasd\", em vez de: "contacto": "12131231", "nome": "adsad", "morada": "1d dasd", alguém me poderia ajudar?
KTachyon Posted June 7, 2014 at 06:09 PM Report #558573 Posted June 7, 2014 at 06:09 PM Isto é uma dúvida de PHP. Existe uma JsonResponse na Symfony\Component\HttpFoundation. Penso que parece ser uma boa ideia usares essa subclasse. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
rys89 Posted June 7, 2014 at 08:06 PM Author Report #558577 Posted June 7, 2014 at 08:06 PM KTachyon obrigada pela tua resposta, sim tens razão ao usar a subclasse JsonResponse Substituo estas linhas de código $response = new \Symfony\Component\HttpFoundation\Response(json_encode($resultado)); $response->headers->set('Content-Type', 'application/json'); return $response; por um simples return new JsonResponse($resultado) Mas continuo, como o mesmo problema, pois eu tenho de usar doctrine, para ir buscar os meus dados, e depois Serializer, o meu problema aqui esta em Serializer. Ja tentei pesquisar, mas estou com bastantes dificuldades. Não estou a conseguir enviar e receber dados entre android e symfony. Podem me dar um exemplo simples. Já perdi uns dois dias nisto, preciso mesmo de ajuda
odread Posted June 8, 2014 at 12:13 AM Report #558599 Posted June 8, 2014 at 12:13 AM Boas, Problema: Estás a serializar 2x. Estás a o usar o Serializer e o json_encode. Experimenta o seguinte. $manager = $this->getDoctrine()->getManager(); $compte = $manager->getRepository('ProjectSocialBundle:Compte')->find($id); $encoders = array(new XmlEncoder(), new JsonEncoder()); $normalizers = array(new GetSetMethodNormalizer()); $response = new \Symfony\Component\HttpFoundation\Response(json_encode($compte)); $response->headers->set('Content-Type', 'application/json'); return $response; Podes ver um exemplo em javascript no seguinte site: http://jsfiddle.net/KH4XZ/
rys89 Posted June 8, 2014 at 07:56 AM Author Report #558617 Posted June 8, 2014 at 07:56 AM odread obrigada, pela tua resposta, mas mesmo como tu dizes não consegui. A única solução que encontrei que funciona é: $manager = $this->getDoctrine()->getManager(); $compte = $manager->getRepository('ProjectSocialBundle:Compte')->find($id); $resultado[]= array( 'nom' => $compte->getComptNom(), 'prenom' => $compte->getComptPrenom(), 'email' => $compte->getComptEmail() ); return new JsonResponse($resultado); mas assim terei todas as vezes de criar o meu array com os dados que quero enviar, eu penso que com serializer é feito sozinho.. será que tenho razão? Eu envio um parâmetro em Android,para filtrar a minha pesquisa, como a que em Symfony eu recupero essa valor?
josh_lopes Posted June 13, 2014 at 08:41 AM Report #559217 Posted June 13, 2014 at 08:41 AM (edited) "mas assim terei todas as vezes de criar o meu array com os dados que quero enviar" --> Essa e a ideia... teres uma funcao por controlador que te cria o Json de um determinado tipo.... imagina tens um blog, no controlador de Artigos tens uma funcao que converte o modelo Blog:Article para json. Tu escolhes os dados que queres colocar no output, essa e a forma correta, caso contrario perdes o controlo no que estas a partilhar.. Ja para nao falar que o facto de enviares menos dados reduz o size do teu output e isso tb e benefico. Estou a converter o meu projecto www.loop-anime.com para symfony este e um dos resultados: { payload: { animes: [ { id: 30, poster: "/img/episodes/thetvdb/posters/88651-2.jpg", genres: "Action,Animation,Fantasy", startTime: "2009-04-07", endTime: "", title: "07-Ghost", plotSummary: "Set in a gothic fantasy world, this is the story of Teito Klein, an orphaned slave who became the top military academy student. However, an unexpected turn of events left him pursued by the forces of the Barsburg Empire. Now an escaping convict, Teito's sheltered by the church and it’s law of sanctuary. Here, he discovered many mysteries surrounding himself, the church, and the Empire itself. The fact that he might be connected to a dethroned king and the mystical stone of god, 'The Eye of Mikhael' made him the target of the empire more than ever. Fortunately the church is under the mythical 7 Ghost protection. But who are the Ghosts really. Will Teito be free from the military's clutch, And what of his said mission to uncover the history. And who is the military's Chief-of-Staff Ayanami exactly. Teito's future seems to have spiraled into an unexpectedly perilous path.", rating: 8, status: "Ended", runningTime: "25", ratingUp: 18, ratingDown: 4 } ] } } Escolhi a informacao principal que um anime em JSON devera ter, ainda havia mais informacao agregado ao anime mas nao e necessario para um terceiro, pelo menos por enquanto. Edited June 13, 2014 at 08:51 AM by josh_lopes
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now