ZendStdlibHydratorClassMethods extract()返回一个null数组


ZendStdlibHydratorClassMethods extract() returning a null array

我之前问过一个关于如何有效地使用表网关进行插入/更新的问题,并从文档中得知Zend'Stdlib'Hydrator'ClassMethods,如本代码所示:

public function saveAlbum(Album $album)
{
    $data = array(
        'artist' => $album->artist,
        'title'  => $album->title,
    );
    $id = (int)$album->id;
    if ($id == 0) {
        $this->tableGateway->insert($data);
    } else {
        if ($this->getAlbum($id)) {
            $this->tableGateway->update($data, array('id' => $id));
        } else {
            throw new 'Exception('Form id does not exist');
        }
    }
}

可以用以下代码替换:

saveAlbum(Album $album) 
{
    $hydrator   = new ClassMethods(false);
    $data = $hydrator->extract($album);
    ...

但我发现当使用$hydrator->extract($album);时,它返回一个空数组,这可能是什么原因造成的?我对传递到函数中的$album对象执行了var_dump(),它似乎是有效的。我还有别的事情要做吗?

类方法hydrator假设每个属性都有getXXX()方法,但上一个问题中的类没有。您可能想尝试Zend'Stdlib'Hydrator'ObjectProperty hydrator,这应该使用对象的公共属性返回一个数组。