Jump to content

Recommended Posts

Posted

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?

Posted

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

Posted

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

Posted

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/

Posted

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?

Posted (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 by josh_lopes

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.