yii2 25个核心验证器详解

http://www.yiichina.com/doc/guide/2.0/input-validation
https://www.yiichina.com/doc/guide/2.0/tutorial-core-validators(核心验证器Core Validators)

yii\base\Model::rules() 是验证规则
yii\base\Model::validate()是验证函数

利用25个核心验证器来验证输入是否合法。
25个核心验证器在两个地方:yii\validators\xxValidator.php 或者 yii\captcha\xxValidator.php
通常调用某个核心验证器,会调用它的别名,这个别名定义在 yii\validators\Validator.php里:
public static $builtInValidators = [
    'boolean' => 'yii\validators\BooleanValidator',
    'captcha' => 'yii\captcha\CaptchaValidator',
    'compare' => 'yii\validators\CompareValidator',
    'date' => 'yii\validators\DateValidator',
    'datetime' => [
        'class' => 'yii\validators\DateValidator',
        'type' => DateValidator::TYPE_DATETIME,
    ],
    'time' => [
        'class' => 'yii\validators\DateValidator',
        'type' => DateValidator::TYPE_TIME,
    ],
    'default' => 'yii\validators\DefaultValueValidator',
    'double' => 'yii\validators\NumberValidator',
    'each' => 'yii\validators\EachValidator',
    'email' => 'yii\validators\EmailValidator',
    'exist' => 'yii\validators\ExistValidator',
    'file' => 'yii\validators\FileValidator',
    'filter' => 'yii\validators\FilterValidator',
    'image' => 'yii\validators\ImageValidator',
    'in' => 'yii\validators\RangeValidator',
    'integer' => [
        'class' => 'yii\validators\NumberValidator',
        'integerOnly' => true,
    ],
    'match' => 'yii\validators\RegularExpressionValidator',
    'number' => 'yii\validators\NumberValidator',
    'required' => 'yii\validators\RequiredValidator',
    'safe' => 'yii\validators\SafeValidator',
    'string' => 'yii\validators\StringValidator',
    'trim' => [
        'class' => 'yii\validators\FilterValidator',
        'filter' => 'trim',
        'skipOnArray' => true,
    ],
    'unique' => 'yii\validators\UniqueValidator',
    'url' => 'yii\validators\UrlValidator',
    'ip' => 'yii\validators\IpValidator',
];

 

验证器中when和on的用法

class MyModel extwnds \yii\base\Model
{
    const MY_SCENARIO = 'myscenario';
    public function rules()
    {
        return [
            [['name', 'email', 'subject', 'body'], 'required'],
            ['email', 'email'],
            ['state', 'required', 
                'when' => function($model) { //when-当满足条件才会去验证
                    return $model->country == 'USA';
                }
                'on' => [self::MY_SCENARIO] //on-自定义的当前model的专属场景
            ],
        ];
    }

}

如下是我自己例子,可直接忽略。背景是当字段os_platform和os_partition满足一定条件时,os_remain必须有。

//验证必须前提是os_remain存在
$request['os_remain'] = isset($request['os_remain'])?$request['os_remain']:'';
$validatorSystemReload = \yii\base\DynamicModel::validateData($request, [
    [['os_remain'], 'required',  'default', 'value' => '',
        'when' => function () use ($request) {
            return (
                (
                    in_array($request['os_platform'],[
                            '1','2','3'
                    ])

                    &&

                    $request['os_partition'] == '3'
                )

                ||

                (
                    in_array($request['os_platform'], [
                        '4','5'
                    ]) 

                    && 
                    
                    $request['os_partition'] == '1'
                )
            );
        }],
]);
if ($validatorSystemReload->hasErrors()) {
    return $this->response(ResCode::CODE_FAILED, 'os_remain不能为空');
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值