2012-12-14 58 views

回答

3

看看到rules()方法。您可以輕鬆地添加自定義的檢查,像這樣的:

// required by default 
protected $_validation_required = TRUE; 

public function rules() 
{ 
    if ($this->validation_required()) 
    { 
     // return all model rules 
     return array(
       // default rules here 
     ); 
     // or 
     // if extending model with existing rules 
     return parent::rules(); 
    } 
    else 
    { 
     // skip validation 
     return array(); 
    } 
} 

public function validation_required($required = TRUE) 
{ 
    if ($required === NULL) 
    { 
      // work as getter 
      return $this->_validation_required; 
    } 

    // set value 
    $this->_validation_required = (bool)$required; 
    return $this; 
} 

當然,你可以用不同的事件(插入/更新等),自定義規則擴展該代碼。

PS。您也可以覆蓋check()方法,並在$this->validation_required() == TRUE時返回TRUE。但我傾向於發送空規則(因爲rules()是專門爲定製設計的,而check()是一種系統方法)。

+0

謝謝...難道真的沒有內置的方式待辦事項? – Peter

+0

這是內置的方式))在以前的版本中,規則被定義爲屬性。使用特殊的'rules()'方法驗證變得更加靈活。 – biakaveron

0

在接受的答案,使用$這 - > validation_required()像一個getter功能似乎是錯誤的(需要的參數的$默認值爲!= NULL)

public function validation_required($required = TRUE) 
{ 
    if ($required === NULL) 
    { 
     // work as getter 
     return $this->_validation_required; 
    } 
...