驗證場景

驗證場景

版本 新增功能
5.0.4 增加hasScene方法用于檢查是否存在驗證場景

可以在定義驗證規(guī)則的時候定義場景,并且驗證不同場景的數(shù)據(jù),例如:

$rule = [
    'name'  => 'require|max:25',
    'age'   => 'number|between:1,120',
    'email' => 'email',
];
$msg = [
    'name.require' => '名稱必須',
    'name.max'     => '名稱最多不能超過25個字符',
    'age.number'   => '年齡必須是數(shù)字',
    'age.between'  => '年齡只能在1-120之間',
    'email'        => '郵箱格式錯誤',
];
$data = [
    'name'  => 'thinkphp',
    'age'   => 10,
    'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule);
$validate->scene('edit', ['name', 'age']);
$result = $validate->scene('edit')->check($data);

表示驗證edit場景(該場景定義只需要驗證name和age字段)。

如果使用了驗證器,可以直接在類里面定義場景,例如:

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];
    
    protected $message  =   [
        'name.require' => '名稱必須',
        'name.max'     => '名稱最多不能超過25個字符',
        'age.number'   => '年齡必須是數(shù)字',
        'age.between'  => '年齡只能在1-120之間',
        'email'        => '郵箱格式錯誤',    
    ];
    
    protected $scene = [
        'edit'  =>  ['name','age'],
    ];
    
}

然后再需要驗證的地方直接使用 scene 方法驗證

$data = [
    'name'  => 'thinkphp',
    'age'   => 10,
    'email' => 'thinkphp@qq.com',
];

$validate = new \app\index\validate\User($rule);
$result = $validate->scene('edit')->check($data);

可以在定義場景的時候?qū)δ承┳侄蔚囊?guī)則重新設(shè)置,例如:

namespace app\index\validate;

use think\Validate;

class User extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'number|between:1,120',
        'email' => 'email',    
    ];
    
    protected $message  =   [
        'name.require' => '名稱必須',
        'name.max'     => '名稱最多不能超過25個字符',
        'age.number'   => '年齡必須是數(shù)字',
        'age.between'  => '年齡只能在1-120之間',
        'email'        => '郵箱格式錯誤',    
    ];
    
    protected $scene = [
        'edit'  =>  ['name','age'=>'require|number|between:1,120'],
    ];
    
}

可以對場景設(shè)置一個回調(diào)方法,用于動態(tài)設(shè)置要驗證的字段,例如:

$rule = [
    'name'  => 'require|max:25',
    'age'   => 'number|between:1,120',
    'email' => 'email',
];
$msg = [
    'name.require' => '名稱必須',
    'name.max'     => '名稱最多不能超過25個字符',
    'age.number'   => '年齡必須是數(shù)字',
    'age.between'  => '年齡只能在1-120之間',
    'email'        => '郵箱格式錯誤',
];
$data = [
    'name'  => 'thinkphp',
    'age'   => 10,
    'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule);
$validate->scene('edit', function($key,$data){
    return 'email'==$key && isset($data['id'])? true : false;
});
$result = $validate->scene('edit')->check($data);
文檔最后更新時間:2018-04-26 10:46:44

文檔
目錄

深色
模式

切換
寬度