我正在使用Symfony处理REST API,但是我的json_decode函数的数组返回null。我已经看到他在编码方面可能会遇到问题,但我不确定。 这是我的json:
{
"id": 1,
"title": "Titre",
"content": "Contenu",
"vendeur": null
}
这是我的序列化和解码json的功能:
/**
* @Route("/api_articles_list", name="api_articles_list")
* @Method({"GET"})
*/
public function showActionListSerialize()
{
$articles = $this->getDoctrine()->getRepository('AppBundle:Article')->findAll();
// return new JsonResponse(array('articles' => $articles));
$data = $this->get('serializer')->serialize($articles, 'json');
$response = new Response($data);
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/api_articles_list/articles_list", name="articles_list")
* @Method({"GET"})
*/
public function showActionList()
{
$articles = json_decode(utf8_encode($this->showActionListSerialize()), true);
var_dump($articles);
return $this->render('listeArticles.html.twig', array('articles' => $articles));
}
答案 0 :(得分:1)
您正在尝试对数组进行编码,请在对列表进行序列化后放置encode函数:
/**
* @Route("/api_articles_list", name="api_articles_list")
* @Method({"GET"})
*/
public function showActionListSerialize()
{
$articles = $this->getDoctrine()->getRepository('AppBundle:Article')->findAll();
// return new JsonResponse(array('articles' => $articles));
$data = $this->get('serializer')->serialize($articles, 'json');
$response = new Response(utf8_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
/**
* @Route("/api_articles_list/articles_list", name="articles_list")
* @Method({"GET"})
*/
public function showActionList()
{
$articles = json_decode($this->showActionListSerialize(), true);
var_dump($articles);
return $this->render('listeArticles.html.twig', array('articles' => $articles));
}
答案 1 :(得分:1)
首先,欢迎使用StackOverflow
您的第二个控制器应该看起来像这样以实现您的目标:
/**
* @Route("/api_articles_list/articles_list", name="articles_list")
* @Method({"GET"})
*/
public function showActionList()
{
$articles = json_decode(utf8_encode($this->showActionListSerialize()->getContent()), true);
var_dump($articles);
return $this->render('listeArticles.html.twig', array('articles' => $articles));
}
不是必须首先使用utf8_encode。然后,您的方法 showActionListSerialize 返回HttpFoundation Response 对象。
当您使用如下序列化的数据来实例化响应时:
$response = new Response($data);
实际上与这样做相同:
$response->setContent($data);
因此,要访问JSON数据,您需要 getContent 方法。
的实际输出
var_dump(utf8_encode($this->showActionListSerialize());
是:
HTTP / 1.0 200 OK缓存控制:无缓存,私有Content-Type: application / json日期:2018年11月26日星期一13:25:22 GMT [{“ content”:“ Lorem ipsum“,” vendeur“:” test_vendeur“,” id“:1,” title“:” title_test“}]”“
和输出
var_dump(utf8_encode($this->showActionListSerialize()->getContent());
是
[{“ content”:“ Lorem ipsum“,” vendeur“:” test_vendeur“,” id“:1,” title“:” title_test“}]
此解决方案应为您工作。您的树枝模板应如下所示:
{% block body %}
{% for article in articles %}
<br>
id: {{ article.id }} <br>
title: {{ article.title }}<br>
content: {{ article.content }}<br>
vendeur: {{ article.vendeur }}
{% endfor %}
{% endblock %}