我已在服务器上安装了api-platform演示,并创建了一个使用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_decode和使用JMSSerializer,得到了一个美丽的对象,但是我仍然无法通过类似于访问JSON属性的方式访问ISBN、标题等。
{% for book in listBooks %}
{{ dump(book.title) }}
<!-- .... -->
{% endfor %}
当我使用json_decode对$listBooks进行解析时,我得到了以下结果:
{{ dump(listBooks) }}
当我尝试像这样访问每个字段时,出现了错误:
{{ dump(listBooks.@id) }}
{{ dump(listBooks['hydra:member']) }}
....
我有什么遗漏吗?谢谢。
for
循环中使用{{ dump(book) }}
会给你什么信息? - Matias Kinnunen$dataBooks->getBody()->getContents();
返回一个字符串 (来源),所以你可能需要使用json_decode
。你说它不起作用;为什么?如果你执行$listBooks = json_decode($listBooks);
然后在 Twig 中使用dump
,你会得到什么? - Matias Kinnunenjson_decode($listBooks, true);
,这样你就可以得到一个关联数组而不是对象。然后你可能能够执行{{ dump(listBooks['hydra:member']) }}
等操作。 - Matias Kinnunen