2014-01-11 87 views
0

我實現了一個驗證碼類型,殭屍程序檢查在哪裏,而不是讓用戶填寫令人討厭的捕獲,我們創建一個名爲password_confirm的隱藏字段,然後當檢查發佈的變量,如果它包含一個值將發生錯誤。在Yii中實施強制空驗證?

我已經閱讀,顯然最好在beforeValidate()事件處理程序中實現,而不是創建新的驗證規則。

但是我不確定如何停止進程以及如果甚至有必要返回錯誤消息,因爲當您調用validate()時,它將清除所有現有的錯誤消息。

也不太確定,如果我們可以使用情景設置它,所以只有在註冊方案適用。

在表單控件:

<div class="row"> 
     <?php echo $form->hiddenField($model, 'password_confirm'); ?> 
     <?php echo $form->error($model,'password_confirm'); ?> 
    </div> 

在FormModel:

class LoginForm extends CFormModel 
{ 
public $password_confirm; 

... 

protected function beforeValidate() 
    { 
    if(empty($this->password_confirm)) 
     { 
      return false; 
     } 
     else 
     { 
      return parent::beforeValidate(); 
     } 
    } 

我有一個屬性不定義的錯誤:所以我添加到用戶模式:

public $password_confirm; 

但是在註冊之後,它沒有顯示除應用程序日誌以外的任何內容。這裏可能有很多問題,我爲這個令人費解的問題感到抱歉。

回答

1

試試這個

protected function beforeValidate() 
    { 
    if(empty($this->password_confirm)) 
     { 
      $this->addError('password_confirm','You crazy bot... go away'); 
     } 
     else 
     { 
      return parent::beforeValidate(); 
     } 
    } 

當然,你可以,如果驗證通過$this->addError($attribute,$message);

這裏$屬性是對應於您要添加的錯誤和$消息該字段名失敗添加錯誤消息您想要顯示

0

首先,您在窗體中使用隱藏字段,隱藏字段,您將無法看到或正常填寫!所以更改爲密碼字段,

您可以將新的特定情景模型,並檢查使用getScenario()那種情況下,我也覺得beforeValidate()是一個好地方,

和你可以添加錯誤特定的屬性,當出現你的邏輯使用addError(),做手工return false;停止進程,

,並在驗證失敗時,你可以做getErrors()所有已出了錯

+0

'你不能看到,或者正常填寫!'正確,所以我的機器人將被欺騙填補領域,但普通用戶不會。因此,當它被填滿時,我知道它是一個機器人。 – surfer190

+0

你想填補或不填?決定男人:D。你說如果沒有正確填寫,你想顯示錯誤? – tinybyte

+0

錯誤,閱讀'如果它包含一個值將出現錯誤。' – surfer190