0

以前、tablegateway を使用して挿入\更新を効率的に行う方法について質問したところ、ドキュメントの次の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これを機能させるために他に何かしなければならないことはありますか?

4

1 に答える 1

1

クラス メソッド ハイドレーターは、各プロパティにメソッドがあることを前提としていますgetXXX()が、前の質問のクラスにはありません。Zend\Stdlib\Hydrator\ObjectProperty代わりに hydratorを試してみることをお勧めします。これは、オブジェクトのパブリック プロパティを使用して配列を返す必要があります。

于 2014-04-24T14:53:47.800 に答える