2013-11-22 64 views
0

我想設置一個字段,只有當另一場選定值不等於11 我已經試過了這個例子Yii的ConditionalValidator不工作

array('role', 'ext.YiiConditionalValidator', 
         'if' => array(
          array('role', 'compare', 'compareValue'=>"11"), 
         ), 
         'then' => array(
          array('company_id', 'required'), 
         ), 
        ), 
        ), 

我嘗試下載新ConditionalValidator reuired。

,甚至試圖自定義條件:

public function checkEndDate($attributes,$params) 
{ 


     $this->addError('company_id','Error Message'); 

} 
    public function rules() { 

     return array( 
    array('company_id', 'checkEndDate') 
    ); 
    } 

但是這一切都顯示錯誤。任何簡單的方法來解決這個問題?

+0

當你定義,當角色等於11則需要COMPANY_ID。這是錯誤的你的目的:「我試圖設置一個字段,只有當另一個字段選擇的值不等於11」 – secretlm

回答

0

爲什麼不使用場景?如果您要創建與/編輯模式「的customer_type =主動」你可以事先用特殊的情況下創建它:

$model = new MyModel(MyModel::SCENARIO_ACTIVE); 

,然後定義您的規則,包括情景:

array('birthdate, city', 'required', 'on' => MyModel::SCENARIO_ACTIVE), 
array('city', 'in', 'range' => array("sao_paulo", "sumare", "jacarezinho"), 'on' => MyModel::SCENARIO_ACTIVE) 

如果你不」像這樣,你總是可以非常簡單地創建你自己的驗證器。

在規則:

array('customer_type', 'myCustomValidator'), 

在模型類:

function myCustomValidator(){ 
    if($this->customer_type == 'active'){ 
     ... 
     if($error){ 
     $this->addError(...); 
     } 
    } 
} 
+0

請再次閱讀我的問題。我編輯了它。第二種方式,我嘗試失敗。第一個我不明白。你能解釋一下嗎? – Jeny

+0

我在驗證程序中看不到任何檢查(checkEndDate)。它總是增加錯誤。 – Stalinko

+0

即使沒有任何檢查我的功能不會添加一個錯誤。這是問題。 – Jeny