【问题标题】:Yii2 validate field as email if is not numericYii2 如果不是数字,则将字段验证为电子邮件
【发布时间】:2016-03-09 15:23:43
【问题描述】:

我的项目中有这个类:

<?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 validation yii2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以定义一个 inline 函数来验证规则中的字段。在你的情况下,我想你可能会做类似的事情:

          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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 2012-04-08
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 2018-01-12
        相关资源
        最近更新 更多