此代码运行良好:
class AlbumController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel(
array(
'albums' => $this->getEntityManager()->getRepository('Album\Entity\Album')->findAll()
)
);
}
}
此代码发送了空对象:
class AlbumController extends AbstractRestfulController
{
public function getList()
{
return new JsonModel(
array(
'albums' => $this->getEntityManager()->getRepository('Album\Entity\Album')->findAll()
)
);
}
}
//is returning result like this
{"albums":[{},{},{},{},{},{},{},{}]}
答案 0 :(得分:0)
如果你只是将Album
个对象嵌入到这样的数组中,你永远不会得到有效的json输出...
JsonModel
类将无法将它们转换/序列化为有效的json数据,这就是为每个{}
获取Album
(空对象)的原因。
在JsonSerializable
类的jsonSerialize
方法中实现包含所需代码的Album
界面,或者将JsonModel
知道如何序列化的内容转换为您的数组控制器方法。
使用JsonSerializable
:
class Album implements JsonSerializable {
// ...
function jsonSerialize() {
//some means of serializing the data...
}
}
或者只需在AlbumController
方法的getList
内手动执行:
$albums = $this->getEntityManager()->getRepository('Album\Entity\Album')->findAll()
$array = [];
foreach( $albums as $album ){
$array[] = [
'id' => $album->getId(),
'name' => $album->getName()
]
}
return new JsonModel(
array(
'albums' => $array
);
);