我使用Zend的一些模型抽象類。Zend Framework的模型抽象和空值
- Default_Model_Abstract:包含__set和__get以及每個值的setter和getter,並作爲虛擬對象工作。
- Default_Model_AbstractMapper:包含save(),find(),fetchall()等方法。
幾個月前我在Zend Quick Start文檔中發現了這個解決方案。但在過去幾個月裏,我在處理空值時遇到了一些問題。
我有一個Zend_Form_Element_Select元素,它從數據庫中獲取它的值。它的值是來自外鍵的ID。所以只接受有效的外鍵id或null。但是Zend_Form_Element_Select元素是可選的,所以可能會得到一個空字符串( - > addMultiOption(null,'Choose your option'))。但是這會給我一個錯誤,因爲一個空字符串不是一個有效的外鍵id既不是null也是允許的。
我的第一個嘗試是檢查我的控制器處理表單,如果select元素值是一個emptry字符串並將其更改爲null。這很醜陋,問題在於,我的setter將null更改爲0,因爲我使用(int)$ value對其進行了驗證。
public function setId($value)
{
$this->_id = (int) $value;
return $this;
}
所以另一種方法是,我查一下我的二傳手,如果該值爲空,然後我不(INT)驗證它。那看起來就像那樣。
public function setId($value)
{
if($value !== null)
$this->_id = (int) $value;
return $this;
}
這會工作FR這種情況下,但我沒有任何意義,因爲有時我想這樣重置現有的值設置爲null。所以我不能在setter中忽略null值。所以另一種方法是:
public function setId($value)
{
if($value !== null)
$this->_id = (int) $value;
else
$this->_id = null;
return $this;
}
但現在它真的很難看。我很好奇看到你們如何解決這個問題。因爲我認爲必須有一個簡單的解決方案,而不需要在setter中移除(int)。因爲據我所見,這似乎是使用setter的常用方法。
最好的問候, 尼科
這不是你的__set或__get問題的答案,但你可以在控制器中驗證if(trim($ yourselect)== '')$ yourselect = null; ? – Ashley 2010-12-09 09:43:16