ZF2:TableGateway ResultSet 到 JSON
Posted
技术标签:
【中文标题】ZF2:TableGateway ResultSet 到 JSON【英文标题】:ZF2: TableGateway ResultSet to JSON 【发布时间】:2014-11-29 10:14:02 【问题描述】:我正在尝试将数据从我的数据库返回到 Zend Framework 2 中的 JSON。我现在正在使用 TableGateway,它返回一个 ResultSet。但是 JsonModel 无法显示结果集。 那么有没有办法转换它,或者有没有其他方法可以访问我的数据库?
HomeController 中的 IndexAction
public function indexAction()
return new JsonModel(array(
'posts' => $posts,
'resources' => $resources,
'style' => $style,
'imgStyle' => $imgStyle,
'success' => true,
));
返回结果集的函数
public function fetchAll()
$resultSet = $this->tableGateway->select(function (Select $select)
$select->order('date DESC');
);
return $resultSet;
【问题讨论】:
【参考方案1】:考虑到您已经在 module.config.php 中完成了这项工作:
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy',
),
),
我的下一个建议是将结果转换为数组。
$resultSet->toArray();
或
$return = array();
foreach( $resultSet as $r )
$return[]=$r;
你返回的新JsonModel,是正确的。
【讨论】:
toArray() 不起作用,所以我手动将其转换为数组! 是的,事实上,如果你将 toArray 提取到一个类中,它会失败,不知道为什么,让函数 toArray() 始终工作会很有用:),我相信 zf2 开发人员可能这样做有充分的理由。【参考方案2】:您可以在fetchAll
方法或Controller
中使用Zend\Stdlib\Hydrator\Reflection
-hydrator:
public function __construct(\Zend\Stdlib\Hydrator\Reflection $hydrator)
$this->hydrator = $hydrator;
public function fetchAll() : array
$resultSet = $this->tableGateway->select(function (Select $select)
$select->order('date DESC');
);
$return = [];
foreach($resultSet as $result)
$return[] = $this->hydrator->extract($result);
return $return;
【讨论】:
以上是关于ZF2:TableGateway ResultSet 到 JSON的主要内容,如果未能解决你的问题,请参考以下文章