集成 laravel校验类至 swoft
php >7.2, swoft > v1.9 (暂不支持v2.x)
- 技术目标:
- 独立使用 laravel validation组件,文档和使用方式参考 laravel 社区文档
- 在尽可能精简代码的前提下,尽可能迁移 laravel validation的功能:Validation, 多语言模板支持,通用校验方法
- 实现:
- 参照laravel validation的加载依赖,加载validation所需要的Validator Factory, Translator组件
- Validator 类行为与laravel validator facade一致
在composer.json require 中添加如依赖
...
"require": {
...
"swoft-laravel/validation": "^1.0.3",
...
}
....
更新依赖
# 更新所有依赖
composer update
# 或者只更新生产环境依赖
composer update --no-dev
在根目录下新建文件结构:
./resources/
└── lang
├── en
└── zh
├── message.php
详细用法可参考laravel官方文档:
use SwoftLaravel\Validation\Validator;
class Controller{
public function test($request) {
$data = $reqquest->post();
$rules = [
'mobile' => 'required|mobile',
'email' => 'required|email'
];
$errmap = [
'mobile.required' => '手机号不能为空',
'mobile.mobile' => '手机号格式不正确',
'email.required' => '邮箱不能为空',
'email.email' => '邮箱格式不正确'
];
$validator = Validator::make($data, $rules, $errmap);
$error = null;
if ($validator->fails()) {
$validateErrors = $validator->messages();
$error = [];
foreach ($validateErrors->keys() as $field) {
$msg = $validateErrors->get($field);
$error[$field] = $msg[0];
}
}
}
}
使用通用校验类
use SwoftLaravel\Validation\Traits\TraitValidate;
class MockController{
use TraitValidate;
public function test($request) {
$data = $reqquest->post();
$rules = [
'mobile' => 'required|mobile',
'email' => 'required|email'
];
$errmap = [
'mobile.required' => '手机号不能为空',
'mobile.mobile' => '手机号格式不正确',
'email.required' => '邮箱不能为空',
'email.email' => '邮箱格式不正确'
];
$errors = $this->validateError($data, $rules, $errmap);
if ($errors !== null){
return success_result($errors);
}
}
}
模板文件的使用 详细用法可参考官方文档:
// 新增模板文件./resources/lang/zh/message.php
return [
'system_busy' => '系统繁忙, 请重试',
'mobile' => [
'required' => '请输入11位手机号',
'invalid' => '请输入11位手机号',
'registered' => '该账号已注册',
'unregistered' => '该账号未注册'
],
'vcode' => '你的注册码为
];
// 使用模板
$message = translator('message.systembusy');