Zend \ Stdlib \ Hydrator \ ClassMethods extract()返回一个空数组

时间:2014-04-24 13:37:05

标签: php zend-framework2 table-data-gateway

我之前asked a question关于如何使用tablegateway有效地执行insert \ update,并在此代码from the docs中被告知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);时它会返回一个空数组,这可能是什么原因?我在传递给函数的var_dump()对象上做了$album,它似乎有效。我还需要做些什么才能让它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

类方法hydrator假设您为每个属性设置了getXXX()方法,但前一个问题中的类没有。您可能想要尝试Zend\Stdlib\Hydrator\ObjectProperty水合器,这应该使用对象的公共属性返回一个数组。