2016-12-30 68 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

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