2014-04-24 65 views
0

我以前asked a question一下如何有效地執行插入\更新與tablegateway和Zend\Stdlib\Hydrator\ClassMethods獲悉本規範from the docs的Zend STDLIB 保溼 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()被傳遞給函數,它似乎有效。還有什麼我必須做的才能使這個工作?

回答

1

類方法水化器假定您有每個屬性的getXXX()方法,但上一個問題中的類沒有。您可能想嘗試使用Zend\Stdlib\Hydrator\ObjectProperty hydrator,它應該使用對象的公共屬性返回一個數組。

+0

不錯,只是我想要的。我將不得不閱讀戰略。這裏沒有任何警告嗎?在我的模型中使用公共屬性和exchangeArray(),就像他們在快速啓動文檔中所做的那樣,似乎是一種好方法。 – red888