# TP验证器
# 使用说明
注意!所有验证器需继承 `\yunj\core\Validate`。
代码示例:
namespace app\demo\validate;
class Demo extends \yunj\core\Validate{
...
}
# 自动处理
说明
在验证数据前,通过调用验证器 auto
方法,设置自动抛出错误消息开启。
方法:auto(bool $enable)
参数:
参数 | 类型 | 说明 |
---|---|---|
enable | bool | 是否开启自动抛出错误消息,默认true |
返回值:当前验证器对象
示例:
namespace app\demo\controller;
use app\demo\validate\Example as ExampleValidate;
class Exampler{
// 数据更新
public function update(){
$validate = new ExampleValidate();
$data = input('post.');
$validate -> auto() -> check($data);
$data = $validate->getData();
// ...后续业务操作
}
}
$validate -> auto() -> check($data)
执行流程分析如下:
- 有错误产生 当前请求为 ajax 类型请求时,会通过 throw_error_json($error) 直接像浏览器抛出异常的 json 数据,结束程序的执行;反之则会跳转到错误页面,并显示错误消息。
- 没有错误产生
调用
check($data)
方法后会返回结果true
# 数据处理
说明
在验证器常规的规则校验通过后,可在验证器中书通过 handleData
方法对数据进行进一步的处理。
方法:handleData(array &$data,$scene):void
参数:
参数 | 类型 | 说明 |
---|---|---|
data | array | 原始传入的校验数据,调用验证器 check($data) 方法时传入的数据 |
scene | string|mixed | 校验场景 |
示例
- 验证器:
namespace app\demo\validate; use think\Db; final class FormDemo extends Validate { protected $rule = [ 'username' => 'require', 'password' => 'require', ]; protected $message = [ 'username.require' => '[账户]不能为空', 'password.require' => '[密码]不能为空', ]; protected $scene = [ 'Test' => ['username', 'password'], ]; protected function handleData(array &$data, $scene): void{ switch ($scene) { case "Test": // 检查username是否存在 $hasExist = Db::name("member")->where([["username", "eq", $data["username"]]])->value("id"); if ($hasExist) { // 可通过调用方法 throw_error_json 或抛出异常 Exception 的方式设置错误信息,并返回验证失败 // 方式1 throw_error_json("[账户]已存在"); // 方式2 //throw new \Exception("[账户]已存在"); } break; } } }
- 验证器调用:
$data = [ "username" => "xiaowang", "password" => "123456", ]; $validate = new \app\demo\validate\FormDemo(); $res = $validate->scene("Test")->check($data); if ($res) { // 验证通过,获取处理后的数据 $data = $validate->getData(); dump($data); } else { // 验证失败,获取失败信息 $error = $validate->getError(); dump($error); }