В основном я кодировал ответ с помощью json и не мог понять, почему он продолжал возвращать правильное количество элементов массива, но они были пустыми.Slim framework не может кодировать 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 ($ серверы)
[{},{}]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;
}
}
Здесь ServerEntity:
<?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 не выполняется?
- Я делаю что-то принципиально неправильное/есть ли лучший способ сделать это?
Хорошо, что имеет смысл. Я действительно не понимал, что происходит за кулисами. Спасибо за объяснение. – TheEditor