Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用来自api平台的JSON_Json_Twig_Symfony 3.4_Api Platform.com - Fatal编程技术网

如何使用来自api平台的JSON

如何使用来自api平台的JSON,json,twig,symfony-3.4,api-platform.com,Json,Twig,Symfony 3.4,Api Platform.com,我已经在服务器上安装了这个演示,并开发了一个客户端应用程序(使用Symfony 3.3),我希望在经典视图(Twig)中显示响应 一切正常:我可以请求并检索响应 但我陷入困境的地方是:当我在自己的观点中抛开回应时,我得到了这个 {"@context":"\/contexts\/Book","@id":"\/books","@type":"hydra:Collection","hydra:member":[{"@id":"\/books\/1","@type":"Book","id":1,"is

我已经在服务器上安装了这个演示,并开发了一个客户端应用程序(使用Symfony 3.3),我希望在经典视图(Twig)中显示响应

一切正常:我可以请求并检索响应

但我陷入困境的地方是:当我在自己的观点中抛开回应时,我得到了这个

 {"@context":"\/contexts\/Book","@id":"\/books","@type":"hydra:Collection","hydra:member":[{"@id":"\/books\/1","@type":"Book","id":1,"isbn":"9783161484100","title":"1st Book","description":"This is my first book synopsis","author":"Hemingroad","publicationDate":"2018-02-16T14:15:58+00:00","reviews":[]}],"hydra:totalItems":1}
以下是我的控制器的方法:

 //...
 use GuzzleHttp\Client;

public function newAction(Request $request)
{
     //initialize client API
    $client = new Client([
        'base_uri' => 'http://my.apidomain.com/',
        'timeout'  => 2.0,
    ]);

    //request to API
    $dataBooks = $client->request('GET', 'books', ['auth' => ['login', 'p@$$w0rd']]);
    $listBooks = $dataBooks->getBody()->getContents();
    return $this->render('book/new.html.twig', array(
        'listBooks'   => $listBooks
    ));
}
我还尝试对$listBooks进行json_解码和使用。 我得到了一个漂亮的对象,但我仍然无法访问JSON属性,比如ISBN,title

 {% for book in listBooks %}
      {{ dump(book.title) }}
       <!-- .... -->
 {% endfor %}

当我试图像这样访问每个字段时,我都出错了

  {{ dump(listBooks.@id) }}
  {{ dump(listBooks['hydra:member']) }}
  ....
我错过什么了吗

谢谢

$dataBooks->getBody()->getContents()返回字符串,如中所述,因此需要使用

$listBooks=json\u解码($listBooks)返回一个对象。在Twig中,您可以使用点表示法访问对象的方法和属性,例如
{{{listBooks.myProp}}
。但由于
hydra:member
包含特殊字符(
),因此需要使用,如中所述:


另一种方法是执行
$listBooks=json\u解码($listBooks,true)以便获得关联数组而不是对象。然后,您可以在Twig中使用括号表示法:

{{ listBooks['hydra:member'] }}

我更喜欢第二种方法,因为在我看来<代码> {{ListBoox[Hydia:Engult:Engult]成员}[}/Cuth]比<代码> {属性(ListBooad,'Hyra:Meult')}/<代码>更清晰,更干净。易于阅读和理解。

{{dump(book)}
for
循环中的
{{dump(book)}}
为您提供了什么?您尝试过listBooks['hydra:member'中的书籍吗?书籍数组似乎是hydra:member。@martias:it没有给我任何东西
json\u解码($listBooks,true)这样您将获得关联数组而不是对象。然后您可能可以执行
{{dump(listBooks['hydra:member'])}
等操作。
{{ attribute(listBooks, 'hydra:member') }}
{{ listBooks['hydra:member'] }}