我正在使用Abraham的TwitterOAuth库和Twig来构建一个迷你应用程序,用户可以在该应用程序中授权,然后根据输入搜索推文。
我可以成功地将API的返回转储到我的页面,但当我试图仅隔离每个返回的推文的推文文本时,我就没有运气了。
以下是我的dashboard.php文件的相关代码:
$user = $connection->get("account/verify_credentials");
if(isset($_POST['query'])) {
$query = $_POST['query'];
$statuses = $connection->get("search/tweets", array("q" => "$query"));
echo $twig->render("dashboard.html", array("access_token" => $access_token, "user" => $user, "statuses" => $statuses));
} else {
echo $twig->render("dashboard.html", array("access_token" => $access_token, "user" => $user));
}
然后我的小树枝模板中的问题代码:
{% if statuses %}
<ul>
{% for status in statuses %}
<li>{{ statuses.text|e }}</li>
{% endfor %}
</ul>
{{ dump(statuses) }}
{% endif %}
{{dump(status)}}可以工作,但UL内部没有任何内容。我对这一切都很陌生,所以我一直在看Abraham的示例代码,他在这里做的是:
{% if user.status %}
{{ user.status.text }}
{% else %}
{{ user.description }}
{% endif %}
所以我想我也可以做同样的事情,但这对我不起作用。我错过了什么?
我通过比较GET帐户/verify_credentials(在Abraham的用户代码中发送的请求)和GET搜索/tweets的示例响应,找到了答案。
如果你比较响应的开头,你会注意到搜索/推特响应需要遍历一个额外的级别。
因此,与其这么做:
{% for status in statuses %}
<li>{{ statuses.text|e }}</li>
{% endfor %}
我做到了:
{% for status in statuses.statuses %}
<li>{{ statuses.text|e }}</li>
{% endfor %}
我意识到那里的命名不太好,但对于像我这样的其他新手来说,要把它分解一下:第一个"状态"是我发送给tridge的变量,第二个"状态"来自我从API得到的响应。
在我最初的代码中,没有什么可以循环的,因为我还没有深入到各个推文的信息,我基本上是在尝试循环浏览父推文。