Yii2 验证字段为电子邮件,如果不是数字


Yii2 validate field as email if is not numeric

我的项目中有这个类:

<?php
namespace app'models;
use Yii;
use yii'base'Model;
class Contact extends Model
{
    public $fullname;
    public $info;
    public function rules()
    {
        return [
            ['fullname','info'],'required'
        ];
    }
}

我想对我的"联系人"字段进行自定义验证。如果字段上的值不是数字,我想将其验证为邮件。

有没有办法用条件验证器来做到这一点?提前感谢所有帮助

你可以做很多事情来完成这个自定义验证器,在 beforeValidate() 中玩输入等等。就个人而言,最好的方法是设置场景。在验证模型之前,在控制器中检查用户输入是否为数字 (is_numeric()),如果将场景设置为"something1",则不设置为"邮件"。这样,您就不必担心验证问题,因为您将为具有不同方案的同一属性设置两个规则。一个规则将是电子邮件,另一个可以是integerOnly或类似的东西。希望对您有所帮助。

您可以定义一个内联函数来验证规则中的字段。在您的情况下,我想您可能会执行以下操作:

    public function rules()
    {
        return [
            ['contact', 'validateContact'],
        ];
    }
    public function validateContact($attribute, $params)
    {
        if ( !is_numeric($this->$attribute) ) {
            $validator = new yii'validators'EmailValidator();
            if ($validator->validate($this->$attribute, $error)) {
                 echo 'Email is valid.';
            } else {
                 echo $error;
            }
        } else {
            echo 'Contact is number';
        }
    }

更多信息:

1) http://www.yiiframework.com/doc-2.0/guide-input-validation.html

2) http://www.yiiframework.com/doc-2.0/guide-input-validation.html#using-client-side-validation