【问题标题】:ZF2: TableGateway ResultSet to JSONZF2:TableGateway ResultSet 到 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;
}

【问题讨论】:

    标签: php json zend-framework2


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多