验证器

ThinkPHP框架提供了强大且灵活的验证器,除了内置的一系列验证规则之外还可以自定义验证规则,具体支持的内置验证规则可查看官方开发手册验证器验证器 - 图1

我们提供了一个已经封装好的验证器基类BaseValidate,位于vendor\lin-cms-tp5\base-core\src\validate

我们推荐开发者在application\api\validate这个目录下去书写你的自定义验证器,且继承于BaseValidate基类

image

定义完验证器后,如下方式调用,如果通过则会继续执行控制器中的逻辑,否则会抛出一个异常并中断执行

  1. public function login(Request $request)
  2. {
  3. (new LoginForm())->goCheck();//调用自定义验证器
  4. // 省略了一堆逻辑
  5. return $result;
  6. }

异常信息

  1. {
  2. "msg": {
  3. "password": "密码不能为空"
  4. },
  5. "error_code": 66667,
  6. "request_url": "cms/user/login"
  7. }

在某些情况下,(new LoginForm())->goCheck();这种语法显得不够优雅,又或者为了一个并不需要复杂验证的接口实现一个验证器显得有些麻烦,于是LinCMS TP5 在原生框架的基础上实现了注解验证器注解参数验证

注解验证器示例

原本(new LoginForm())->goCheck()的调用方式不需要了,只需要在控制器的注释内容中加入固定格式的注解@validate('自定义验证器类名'),即可实现调用自定义验证器。这里的@validate('LoginForm')相当于调用的\app\api\validate\user\LoginForm去验证

  1. /**
  2. * 账户登录
  3. * @param Request $request
  4. * @validate('LoginForm') //注解验证器
  5. * @return array
  6. * @throws \think\Exception
  7. */
  8. public function login(Request $request)
  9. {
  10. // (new LoginForm())->goCheck(); # 开启注释验证器以后,本行可以去掉,这里做更替说明
  11. // 省略了逻辑代码
  12. }

注解参数验证示例

使用@param('参数名','参数注释','参数规则'),进行单个参数验证例如:@param('id','ID信息','require|max:1000|min:1')

  1. /**
  2. * 查询指定bid的图书
  3. * @param Request $bid
  4. * @param('bid','bid的图书','require')
  5. * @return mixed
  6. */
  7. public function getBook($bid)
  8. {
  9. $result = BookModel::get($bid);
  10. return $result;
  11. }

这里要求调用时参数bidrequire,就是必须。

更多详细介绍查阅注释验证器文档验证器 - 图3