這是直接在Zend Quick Start指南之外。我的問題是:爲什麼當getDbTable()
方法分配默認的Zend_Db_Table
對象時,您需要setDbTable()
方法?如果你知道這個映射器使用了一個特定的表格,爲什麼還要通過setDbTable()
提供可能使用「錯誤」表格的可能性?如果剩餘的代碼(find()
,fetchAll()
等)特定於Guestbook
,則可以通過設置表獲得什麼靈活性?Zend - 設計模式DataMapper和表格網關
class Application_Model_GuestbookMapper
{
protected $_dbTable;
public function setDbTable($dbTable)
{
if (is_string($dbTable)) {
$dbTable = new $dbTable();
}
if (!$dbTable instanceof Zend_Db_Table_Abstract) {
throw new Exception('Invalid table data gateway provided');
}
$this->_dbTable = $dbTable;
return $this;
}
public function getDbTable()
{
if (null === $this->_dbTable) {
$this->setDbTable('Application_Model_DbTable_Guestbook');
}
return $this->_dbTable;
}
... GUESTBOOK SPECIFIC CODE ...
}
class Application_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
{
protected $_name = 'guestbook_table';
}