2013-07-06 96 views
1

作爲一個長期的程序編程人員,我最終與Yii結合切換到了OOP/MVC。我根本不後悔,但我有一個可能很明顯的問題。Yii模型規則:只允許在itemAlias中指定的值

在我的模型中,由GII生成,我定義了替換值的規則和別名。現在我想'貨幣'值只允許在別名中指定的輸入。當然我可以做類似is_number的東西,大於0且小於4,但在這種情況下,我必須在添加新貨幣時隨時更新我的​​代碼。是否有更簡單的方法來根據定義的值進行輸入驗證?

<?PHP 
class Affiliateprograms extends CActiveRecord 
{ 

//define rules 
public function rules() 
    { 
    return array(array('currency', 'required')); 
    } 

//set aliases 
public static function itemAlias($type,$code=NULL) 
    { 
    $_items = array('currency' => array('1' => 'US Dollar','2' => 'Euro','3' => 'Yen')); 
    if (isset($code)) 
    return isset($_items[$type][$code]) ? $_items[$type][$code] : false; 
    else 
    return isset($_items[$type]) ? $_items[$type] : false; 
    } 

?> 

回答

1

您可以使用內置的in驗證(實際上是一個CRangeValidator)。

array('currency','in','range'=>array_keys(self::itemAlias('???'))); 

當然你需要插入正確的$type

邊注:請重新考慮你的indenation風格 - 這是非常不尋常,使你的代碼難以閱讀;)

+0

謝謝你,這個曾經指出我忒正確的方向。而不是array_values,我想我需要使用array_keys tho。 – dirk

+0

哦,對。固定,thx。 –