Yii-临时验证

有时您需要验证未绑定到任何模型的值。您可以使用yii \ base \ DynamicModel类,该类支持动态定义属性和规则。

步骤1-actionAdHocValidation方法添加到SiteController

public function actionAdHocValidation() {
   $model = DynamicModel::validateData([
      'username' => 'John',
      'email' => 'john@gmail.com'
   ], [
      [['username', 'email'], 'string', 'max' => 12],
      ['email', 'email'],
   ]);
	
   if ($model->hasErrors()) {
      var_dump($model->errors);
   } else {
      echo "success";
   }
}

在上面的代码中,我们定义了一个具有用户名和电子邮件属性的“动态”模型,并对其进行了验证。

步骤2-在Web浏览器的地址栏中键入http:// localhost:8080 / index.php?r = site / ad-hoc-validation,您将看到一条错误消息,因为我们的电子邮件长度为14个字符。

Yii-临时验证

定制验证器

定制验证器有两种类型-

  • 内联验证器
  • 独立验证器

内联验证器由模型方法或匿名函数定义。如果属性未通过验证,则应调用yii \ base \ Model :: addError()方法以保存错误消息。

下面的RegistrationForm示例验证了city属性,因此它只能接受伦敦和巴黎这两个值。

<?php
   namespace app\models;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username;
      public $password;
      public $email;
      public $country;
      public $city;
      public $phone;
      public function rules() {
         return [
            ['city', 'validateCity']
         ];
      }
      public function validateCity($attribute, $params) {
         if (!in_array($this->$attribute, ['Paris', 'London'])) {
            $this->addError($attribute, 'The city must be either "London" or "Paris".');
         }
      }
   }
?>

独立的验证器扩展了yii \ validators \ Validator类。要实现验证逻辑,您应该覆盖yii \ validators \ Validator :: validateAttribute()方法。

步骤1-要使用独立验证器实现前面的示例,请将CityValidator.php文件添加到components文件夹。

<?php
   namespace app\components;
   use yii\validators\Validator;
   class CityValidator extends Validator {
      public function validateAttribute($model, $attribute) {
         if (!in_array($model->$attribute, ['Paris', 'London'])) {
            $this->addError($model, $attribute, 'The city must be either "Paris"
               or "London".');
         }
      }
   }
?>

步骤2-然后,以这种方式修改RegistrationForm模型。

<?php
   namespace app\models;
   use app\components\CityValidator;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public $username;
      public $password;
      public $email;
      public $country;
      public $city;
      public $phone;
      public function rules() {
         return [
            ['city', CityValidator::className()]
         ];
      }
   }
?>

作者:terry,如若转载,请注明出处:https://www.web176.com/yii/503.html

(0)
打赏 支付宝 支付宝 微信 微信
terryterry
上一篇 2020年10月26日 下午4:15
下一篇 2020年10月26日 下午4:18

相关推荐

发表回复

登录后才能评论