Php Yii2验证字段为电子邮件(如果不是数字)

Php Yii2验证字段为电子邮件(如果不是数字),php,validation,yii2,Php,Validation,Yii2,在我的项目中,我有以下课程: <?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'

在我的项目中,我有以下课程:

<?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”,则将场景设置为“mail”。这样,您就不必担心验证问题,因为您将在不同的场景中为同一属性设置两个规则。一个规则是电子邮件,另一个可以是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';
        }
    }
更多信息:

(一)

(二)