我正在尝试使用Twig来显示一个简单的Doctrine 2实体对象列表。使用DQL查询中未触及的结果提取对象。 PHP代码是这样的:
/*
* I know the query in the Repository class works as I get the correct objects
* from the method and can iterate through them with foreach in PHP, displaying
* data from the object through getters, like ->getId()
*/
$received = $repo->getReceived($id);
/*
* This appears to work, the variables are assigned correctly.
*/
echo $template->render(array("received" => $received, "first" => $received[0]));
Twig模板包含:
{% for item in received %}
<li>Item: {{ item.id }}, {{ first.id }}</li>
{% endfor %}
奇怪的是,twig正确地遍历接收到的数组,数组中有三个对象,有三行输出但是当作为item.id访问时,id(或任何其他成员)不会出现但是第二个输出first.id正确显示。
我应该看到的是:
Item 1, 1
Item 2, 1
Item 3, 1
但相反,我看到了:
Item , 1
Item , 1
Item , 1
我尝试了不同的变体来获取输出但到目前为止还没有任何工作,item.getId,item.getId()。
我在这里缺少什么想法?
编辑转储输出
{{dump(received)}}返回以下内容:
array(3) {
[0]=>
object(Received)#219 (6) {
["id":"Received":private]=>
int(1)
... snip ...
}
[1]=>
object(Received)#208 (6) {
["id":"Received":private]=>
int(2)
... snip ...
}
[2]=>
object(Received)#210 (6) {
["id":"Received":private]=>
int(3)
... snip ...
我把它剪下来,这是三个完整的Doctrine实体对象,所以它们在数组中并且看起来正确。
答案 0 :(得分:0)
我终于找到了解决这个问题的办法,虽然我无法理解为什么我需要这样做。我更改了数组以包含一组数组而不是对象,但这也不起作用。
然后我创建了一个替代数组,用于测试具有完全相同的结构,并且该数组工作没有任何问题。任何人都知道什么可能导致一个阵列工作而另一个阵列失败?两者都是二维数组。
所以我最终得到的是我使用二维数组并将树枝代码更改为:
{% for item in received %}
<li>Item: {{ attribute(item, 'id') }}</li>
{% endfor %}
由于某种原因,需要attribute(),虽然我之前尝试过但是然后Twig抱怨了attribute()不存在。
希望这会对其他人有所帮助。