如何在JsonModel中输出对象输出RESTful API

时间:2016-01-20 12:19:47

标签: php orm doctrine-orm zend-framework2

此代码运行良好:

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":[{},{},{},{},{},{},{},{}]}

1 个答案:

答案 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
    );
);