在Symfony中的数组和对象问题
在Symfony中的数组和对象问题
我通过Symfony中的Action发送了一个对象,但在视图中无法检索到它。
这是Action的代码:
public function testphpAction() { /*一些Doctrine代码*/ $productos = $consulta->getResult(); return $this->render('TPMainBundle:Default:test.html.php', array( 'productos' => $productos, )); }
我尝试了这个线程中的解决方案,但没有效果:PHP错误:无法将stdClass对象用作数组(数组和对象问题)
这是我的视图'test.html.php'的代码:
foreach($productos as $producto) { echo $producto['descripcion']; } //这显示了错误:"无法将TP\MainBundle\Entity\Works对象用作数组"
所以我尝试了另一个线程中的解决方案:
foreach ($productos as $producto) { $id = $producto->id; echo $id; //但它抛出了错误:"无法访问私有属性TP\MainBundle\Entity\Works::$id"
这也不起作用:
$id = $productos->id; //抛出错误:"尝试获取非对象的属性"
我该如何访问它?如果我渲染到twig模板,我就没有这个问题,但我需要使用php。
$productos的var_dump如下所示:(我省略了这个链中的其他对象)
array(3) { [0]=> object(TP\MainBundle\Entity\Works)#290 (4) { ["id":"TP\MainBundle\Entity\Works":private]=> int(1) ["descripcion":"TP\MainBundle\Entity\Works":private]=> string(30) "Landing page for a toys store." ["img":"TP\MainBundle\Entity\Works":private]=> string(12) "images/1.jpg" ["preview":"TP\MainBundle\Entity\Works":private]=> string(13) "images/1m.jpg" }
在Symfony中出现了数组和对象问题。问题出现的原因是没有定义正确的getter方法。解决方法是在循环中使用正确的getter方法来获取数据,而不是直接访问对象属性。
例如,在下面的代码中:
foreach ($productos as $producto) { $id = $producto->id; echo $id; }
尝试使用getter方法来获取id:
$producto->getId();
而不是直接访问对象属性:
$producto->id;
如果定义了正确的getter方法,上述修改应该能够解决问题。
另外,根据你的逻辑,你可以在循环中使用HTML标签<br>。
但是,如果Doctrine查询不同,修改可能不起作用。如果你更改查询以使用WHERE子句,例如:
(SELECT p FROM TPMainBundle:Works p WHERE p.id = :id)
可能会出现"Invalid argument supplied for foreach()"的错误。这是因为查询结果只返回一个单一的结果,而不是可迭代的列表。
如果你只有一个结果要显示,可以直接移除foreach循环。但是请注意,移除foreach循环后,如果视图仍然保留了"Invalid argument supplied for foreach()"的错误提示,可能是因为其他未解决的问题。
希望以上内容能帮助你解决问题,如果还有其他问题,请开启新的讨论。