2016-12-30 46 views
2

我使用Yii2創建網站。有一種叫做Contact Form的模型,如下所示:自定義規則驗證在Yii2中不起作用Contact Form擴展模型

class ContactForm extends Model 
{ 
    public $name; 
    public $email; 
    public $subject; 
    public $body; 
    public $response; 
    public $response2; 

    public function rules() 
    { 
     return [ 
      [['name', 'email', 'subject', 'body'], 'required'], 
      ['email', 'email'], 
      ['response', function ($attribute, $params) 
      { 
       $this->addError($attribute, 'Wrong response 1'); 
      }, 'skipOnError' => false], 
      ['response2', 'validresponse2'], 
     ]; 
    } 

    public function validresponse2($attribute, $params) { 
     $this->addError($attribute, 'Wrong response 2'); 
    } 
} 

有2個屬性(響應和響應2)具有自定義驗證。

這兩個自定義驗證都不起作用。他們根本沒有彈出錯誤信息。當我把回聲「ASD;模具();?這些功能裏面,他們並沒有太死

是我的規則設置錯了,我已經通過其他的問題,但沒有運氣搜索

UPDATE

這是我如何驗證表單在我的控制器

$model = new ContactForm(); 
$model->subject = "New Message"; 

if (isset($_POST['ContactForm'])) { 
    $model->attributes = $_POST['ContactForm']; 
    $model->response = ""; 
    if ($model->validate()) { 
     echo "validated successfully"; 
     die(); 
    } 
} 

而且它總是成功驗證

+0

您是否期待這在客戶端或服務器端工作?因爲它在客戶端不起作用。 – Bizley

+0

它是服務器端,我已經在ActiveForm中將enableClientValidation設置爲false –

+0

並且您是否有表單中這些屬性的字段,以便可以顯示消息?如果是這樣 - ActiveFields或HTML輸入標籤? – Bizley

回答

1

而不是skipOnError您需要將skipOnEmpty設置爲false,否則爲空屬性不會觸發驗證。

skipOnError默認爲true,意味着如果在一個規則中出現驗證錯誤,則跳過此屬性的其餘規則。

+0

它的工作原理!非常感謝! –