PHP json_decode возвращает ноль с Symfony - PullRequest
0 голосов
/ 25 ноября 2018

Я работаю над API REST с Symfony, но моя функция json_decode возвращает ноль с моим массивом.Я видел, что он может быть проблемой с кодировкой, но я не уверен.Вот мой 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));

}

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Прежде всего, Добро пожаловать в 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);

inна самом деле это то же самое, что и:

$response->setContent($data);

Таким образом, для доступа к данным JSON вам нужен метод getContent .

Фактический вывод

var_dump(utf8_encode($this->showActionListSerialize());

is:

HTTP / 1.0 200 OK Cache-Control: без кеша, приватный Тип контента: application / json Дата: понедельник, 26 ноября 2018 13:25:22 GMT [{"content": "Lorem ipsum", "vendeur": "test_vendeur", "id": 1, "title": "title_test"}] "

и вывод

var_dump(utf8_encode($this->showActionListSerialize()->getContent());

is

[{"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 %}
0 голосов
/ 26 ноября 2018

Вы пытаетесь закодировать массив, поместите функцию кодирования после сериализации списка:

/**
 * @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));

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...