Yii 即席验证

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 的验证器验证城市属性,因此它只能接受两个值−伦敦和巴黎。

<?php
   namespace app\models;
   use Yii;
   use yii\base\Model;
   class RegistrationForm extends Model {
      public username;
      publicpassword;
      public email;
      publiccountry;
      public city;
      publicphone;
      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;
      publicpassword;
      public email;
      publiccountry;
      public city;
      publicphone;
      public function rules() {
         return [
            ['city', CityValidator::className()]
         ];
      }
   }
?>

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程