yii2 的校验规则在 vendor\yiisoft\yii2\validators中 yii2 的验证器名称存在于 vendor\yiisoft\yii2\validators\Validator.php

可用验证器


可以使用的验证器的名字为 此数组的键

  1. <?php
  2. public static $builtInValidators = [
  3. 'boolean' => 'yii\validators\BooleanValidator',
  4. 'captcha' => 'yii\captcha\CaptchaValidator',
  5. 'compare' => 'yii\validators\CompareValidator',
  6. 'date' => 'yii\validators\DateValidator',
  7. 'datetime' => [
  8. 'class' => 'yii\validators\DateValidator',
  9. 'type' => DateValidator::TYPE_DATETIME,
  10. ],
  11. 'time' => [
  12. 'class' => 'yii\validators\DateValidator',
  13. 'type' => DateValidator::TYPE_TIME,
  14. ],
  15. 'default' => 'yii\validators\DefaultValueValidator',
  16. 'double' => 'yii\validators\NumberValidator',
  17. 'each' => 'yii\validators\EachValidator',
  18. 'email' => 'yii\validators\EmailValidator',
  19. 'exist' => 'yii\validators\ExistValidator',
  20. 'file' => 'yii\validators\FileValidator',
  21. 'filter' => 'yii\validators\FilterValidator',
  22. 'image' => 'yii\validators\ImageValidator',
  23. 'in' => 'yii\validators\RangeValidator',
  24. 'integer' => [
  25. 'class' => 'yii\validators\NumberValidator',
  26. 'integerOnly' => true,
  27. ],
  28. 'match' => 'yii\validators\RegularExpressionValidator',
  29. 'number' => 'yii\validators\NumberValidator',
  30. 'required' => 'yii\validators\RequiredValidator',
  31. 'safe' => 'yii\validators\SafeValidator',
  32. 'string' => 'yii\validators\StringValidator',
  33. 'trim' => [
  34. 'class' => 'yii\validators\FilterValidator',
  35. 'filter' => 'trim',
  36. 'skipOnArray' => true,
  37. ],
  38. 'unique' => 'yii\validators\UniqueValidator',
  39. 'url' => 'yii\validators\UrlValidator',
  40. 'ip' => 'yii\validators\IpValidator',
  41. ];

使用示例

  1. <?php
  2. public function rules()
  3. {
  4. return [
  5. // email 属性必须是一个有效的电子邮箱地址
  6. ['email', 'email'],
  7. ];
  8. }

自定义校验器

在实际开发中有一些场景,在当前系统自带校验器下无法满足,需要自定义校验规则。

  1. <?php
  2. class XXXOpenMapForm extends Model
  3. {
  4. // 商城物流单号
  5. public $delivery_sn;
  6. // 某物流发货单号
  7. public $express_sn;
  8. public function rules ()
  9. {
  10. $rules = [];
  11. // eitherRequired 自定义校验器
  12. $rules[] = Model::addRule('delivery_sn', 'eitherRequired');
  13. return $rules;
  14. }
  15. public function attributeLabels ()
  16. {
  17. return [
  18. 'delivery_sn' => '发货单号',
  19. 'express_sn' => '某物流单号'
  20. ];
  21. }
  22. /**
  23. * 自定义校验器
  24. * 作用:需要 delivery_sn 和 express_sn 至少传一个
  25. *
  26. * @param string $attribute
  27. * @param array $params
  28. */
  29. public function eitherRequired ($attribute, $params)
  30. {
  31. if(empty($this->delivery_sn) && empty($this->express_sn))
  32. {
  33. $this->addError($attribute, '请提供 [发货单号] 或者 [某物流单号]');
  34. }
  35. }
  36. }