我之前问过一个关于如何有效地使用表网关进行插入/更新的问题,并从文档中得知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,这应该使用对象的公共属性返回一个数组。