数据库 - Model 前置说明
官方开源项目 抓取代理IP

验证器熟悉后,建议配合@Param@Validate注解使用,代码应用域会清晰很多。

介绍

SW-X的验证器,依赖\x\Validate组件,从v2.5.6.版本起支持。

Validate 组件使用事件机制,支持开发者自定义除了框架以外的验证规则。

同时,Validate验证器还支持场景创建,路由注解使用。


下面为\x\Validate组件所支持的各种方法。

关于多个规则使用

Validate对一个字段,使用多个验证规则,是使用|英文状态下的竖线符号进行分隔。
执行顺序,是从左往右依次执行。
例如,同时使用requireintphone三个规则:

[
    'user_phone' => 'require|int|phone'
]

关于参数传递

Validate的内置规则,有些是需要传递参数才能正常使用,
例如minmax规则,都需要传递一个参数。

Validate规则的参数使用格式为:

规则:参数1,参数2,...参数N

注意:必须是英文状态下的:冒号。
示例:

[
    'money' => 'min:10|max:100',
]

关于数组字段

Validate对多层字段,是使用.英文状态下的逗号进行分隔。
例如param数据为:

[
    'list' => [
        0 => [
            'nick' => 'SW-X 框架'
        ],
    ]
]

规则就可以这样声明字段:

[
    'list.0.nick' => 'max:100'
]

对应的message,可以这样写:

[
    'list.0.nick.max' => '不通过的说明'
]

关于message占位符

Validate的占位符,是对message使用的,用于对错误提示语的字符替换使用。

占位符的使用方式比较复杂,共有3大场景:

A、字段名的替换

假设,现在有一条规则:

$Validate->field('name')->alias('用户名')->rule('require')->message(['require' => '不能为空');

当验证失败时,就会记录error msg不能为空
但在实际开发中,这并不是正常业务想要的,如果想把alias植入到message里,就需要用到占位符


例如,需要记录error msg用户名不能为空
可以使用{:preset}这是框架内置的占位符,用于代替字段名替换
还可以使用{字段名},这跟{:preset}的作用一致。

$Validate->field('name')->alias('用户名')->rule('require')->message(['require' => '{:preset}不能为空');
$Validate->field('name')->alias('用户名')->rule('require')->message(['require' => '{name}不能为空');

如果是多层字段的也需要注意:

$Validate->field('list.0.nick')->alias('用户名')->rule('require')->message(['require' => '{list.0.nick}不能为空');

对应字段名的替换,SW-X推荐使用{:preset}占位符。

B、单个参数的替换

验证规则中,有些规则是不需要额外参数,而有些规则则需要传递参数,例如minmax等内置规则,就是单参数规则

$Validate->field('name')->alias('用户名')->rule('max:100')->message(['max' => '{:preset}字符不能大于100');

按上面的代码,虽然验证失败时,会记录error msg用户名字符不能大于100
当如果之后修改max对应的参数,就要连着修改message的内容,这明显也不是正常业务想要的。

如果想把100插入到message的内容里,可以使用{规则名称}的占位符。
还可以使用{0}的占位符,两种方式的作用一致。
例如:

$Validate->field('name')->alias('用户名')->rule('max:100')->message(['max' => '{:preset}字符不能大于{max}');
$Validate->field('name')->alias('用户名')->rule('max:100')->message(['max' => '{:preset}字符不能大于{0}');

C、多个参数的替换

例如betweenusername等内置规则,就是多参数规则

$Validate->field('age')->alias('年龄')->rule('between:1,100')->message(['max' => '{:preset}只允许在 1-100 之间');

按上面的代码,虽然验证失败时,会记录error msg年龄只允许在 1-100 之间
如果想把1,100分别,插入到message的内容里,可以按参数顺序,使用{0-N}的占位符进行替换。
例如:

$Validate->field('age')->alias('年龄')->rule('between:1,100')->message(['max' => '{:preset}只允许在 {0}-{1} 之间');

batch()

作用:是否全部字段验证完成后,再返回验证结果。
依赖类:\x\Validate
方法名:batch()
返回值:this

参数:

  • bool $batch

    • 默认值false

示例

$Validate = new \x\Validate();
$Validate->batch(true);

field()

作用:指定需要验证的字段信息,常用于单个字段验证,或者配合场景验证器使用。
依赖类:\x\Validate
方法名:field()
返回值:this

参数:

  • string|array $field

    • 默认值[]

示例

$Validate = new \x\Validate();
$Validate->field('name');
// 也可以多个字段
$Validate->field(['name', 'age']);

alias()

作用:验证字段失败后的字段别名,常用于配合单个字段验证。
依赖类:\x\Validate
方法名:alias()
返回值:this

参数:

  • string|array $alias

    • 默认值[]

示例

$Validate = new \x\Validate();
$Validate->field('name')->alias('用户名');
// 也可以多个字段
$Validate->field(['name', 'age'])->alias([
    'name' => '用户名', 
    'age' => '年龄'
]);

rule()

作用:设置字段验证的使用规则,常用于配合单个字段验证。
依赖类:\x\Validate
方法名:rule()
返回值:this

参数:

  • string|array $rule

    • 默认值[]

示例

$Validate = new \x\Validate();
$Validate->field('name')->alias('用户名')->rule('require|max:25');
// 也可以多个字段
$Validate->field(['name', 'age']);
$Validate->alias([
    'name' => '用户名', 
    'age' => '年龄'
]);
$Validate->rule([
    'name' => 'require|max:25', 
    'age' => 'require|between:1,100'
]);

message()

作用:设置字段验证失败后的返回说明,常用于配合单个字段验证。
依赖类:\x\Validate
方法名:message()
返回值:this

参数:

  • array $message

    • 默认值[]

示例

$Validate = new \x\Validate();
$Validate->field('name')->alias('用户名')->rule('require|max:25')->message(['require' => '{:preset}不能为空', 'max' => '{name}最多不能超过{max}个字符']);
// 也可以多个字段
$Validate->field(['name', 'age']);
$Validate->alias([
    'name' => '用户名', 
    'age' => '年龄'
]);
$Validate->rule([
    'name' => 'require|max:25', 
    'age' => 'require|between:1,100'
]);
$Validate->message([
    'name.require' => '{:preset}不能为空', 
    'name.max' => '{name}最多不能超过{max}个字符',
    'age.between' => '{:preset}只允许在 {0}-{1} 之间',
]);

SW-X内置的每一个验证规则,都有默认的message值,如果使用时没有指定对应的message,框架将会使用默认的message

data()

作用:设置需要验证的数据集。
依赖类:\x\Validate
方法名:data()
返回值:this

参数:

  • array $data

    • 默认值[]

示例

$Validate = new \x\Validate();
$Validate->field(['name', 'age']);
$Validate->alias([
    'name' => '用户名', 
    'age' => '年龄'
]);
$Validate->rule([
    'name' => 'require|max:25', 
    'age' => 'require|between:1,100'
]);
$Validate->message([
    'name.require' => '{:preset}不能为空', 
    'name.max' => '{name}最多不能超过{max}个字符',
    'age.between' => '{:preset}只允许在 {0}-{1} 之间',
]);
$Validate->data([
    'name' => 'SW-X',
    'age' => 120,
]);

scene()

作用:选择使用的场景值,配合场景验证器使用。
依赖类:\x\Validate
方法名:scene()
返回值:this

参数:

  • string $scene

    • 默认值null

示例

$Validate = new \x\Validate();
// 这个edit是需要开发者自己创建验证器才能使用的
$Validate->scene('edit');

filter()

作用:移除验证的某些字段,配合场景验证器使用。
依赖类:\x\Validate
方法名:filter()
返回值:this

参数:

  • string $filter

    • 默认值null

示例

$Validate = new \x\Validate();
// 这个edit是需要开发者自己创建验证器才能使用的
$Validate->scene('edit');
$Validate->field(['id', 'name', 'age']);
$Validate->filter('id, age');

fails()

作用:执行验证,并且是否不通过验证。
依赖类:\x\Validate
方法名:fails()
返回值:true不通过验证,false通过验证

参数:

  • string $data

    • 作用:可以代替data()方法,传入验证数据。
    • 默认值[]

示例

$Validate = new \x\Validate();
$Validate->field(['name', 'age']);
$Validate->alias([
    'name' => '用户名', 
    'age' => '年龄'
]);
$Validate->rule([
    'name' => 'require|max:25', 
    'age' => 'require|between:1,100'
]);
$Validate->message([
    'name.require' => '{:preset}不能为空', 
    'name.max' => '{name}最多不能超过{max}个字符',
    'age.between' => '{:preset}只允许在 {0}-{1} 之间',
]);
$data = [
    'name' => 'SW-X',
    'age' => 120,
];
if ($Validate->fails($data)) {
    echo '验证不通过';
}

errors()

作用:获得验证失败后的message集合。
依赖类:\x\Validate
方法名:errors()
返回值:array

参数:无

示例:

$Validate = new \x\Validate();
$Validate->field(['name', 'age']);
$Validate->alias([
    'name' => '用户名', 
    'age' => '年龄'
]);
$Validate->rule([
    'name' => 'require|max:25', 
    'age' => 'require|between:1,100'
]);
$Validate->message([
    'name.require' => '{:preset}不能为空', 
    'name.max' => '{name}最多不能超过{max}个字符',
    'age.between' => '{:preset}只允许在 {0}-{1} 之间',
]);
$data = [
    'name' => 'SW-X',
    'age' => 120,
];
if ($Validate->fails($data)) {
    // 打印失败原因
    var_dump($Validate->errors());
}

返回值结构(二维数组):

[
    [
        "intact_field" => "list.0.nick", // 原来的字段名
        "field" => "nick", // 末尾的字段名
        "rule" => "max", // 失败的规则名称
        "message" => "昵称的字符长度不能大于100", // 最终替换占位符后的message值
    ]
]

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录