【发布时间】:2016-12-16 00:07:54
【问题描述】:
基本上,我使用 json 编码响应,无法弄清楚为什么它一直返回正确数量的数组成员,但它们是空的。
$app->get('/api/server_list', function ($request, $response, $args) {
$serverlist = new ServerListing($this->db);
$servers = $serverlist->getServers();
$newResponse = $response->withJson($servers);
return $newResponse;
});
这是上面的输出,添加了 print_r($servers)
[{},{}]Array
(
[0] => ServerEntity Object
(
[id:protected] => 1
[serverName:protected] => dc1.domain.com
)
[1] => ServerEntity Object
(
[id:protected] => 2
[serverName:protected] => dc2.domain.com
)
)
ServerListing 的类代码如下:
<?php
class ServerListing extends Listing
{
public function getServers() {
$sql = "SELECT * from servers";
$stmt = $this->db->query($sql);
$results = [];
while($row = $stmt->fetch()) {
$results[] = new ServerEntity($row);
}
return $results;
}
}
这里是服务器实体:
<?php
class ServerEntity
{
public $id;
public $serverName;
public function __construct(array $data) {
if(isset($data['id'])) {
$this->id = $data['id'];
}
$this->serverName = $data['name'];
}
public function getId() {
return $this->id;
}
public function getServerName() {
return $this->serverName;
}
}
它的唯一工作方式是公开。
我了解公共/私人/受保护。虽然这是我第一次使用框架和面向对象的 php。
在另一个路由中使用相同的数据库调用,然后我可以将服务器列表传递给一个视图,它工作正常。
所以我猜有两个问题。
- json 编码为什么会失败?
- 我做错了什么/有没有更好的方法来做到这一点?
【问题讨论】: