在ThinkPHP6中,通过Route::group实现路由分组管理,统一设置前缀和中间件;结合自定义验证器UserValidate,在控制器中调用scene方法指定场景校验参数,确保接口安全。
在 ThinkPHP 中,路由分组和参数验证是构建清晰、安全接口的重要手段。下面以 ThinkPHP 6 为例,说明如何实现路由分组和结合验证器进行参数校验。
路由分组实现
路由分组可以将具有相同前缀或中间件的路由归类管理,提升代码可维护性。
在 route/route.php 中定义分组:
use thinkfacadeRoute; Route::group('api/v1', function () { Route::get('user/:id', 'api.v1.User/read'); Route::post('user', 'api.v1.User/create'); Route::put('user/:id', 'api.v1.User/update'); })->middleware('auth'); // 可统一添加中间件
上述代码中:
立即学习“PHP免费学习笔记(深入)”;
- group(‘api/v1’) 定义了公共前缀;
- 闭包内注册该版本下的用户相关接口;
- 通过 middleware() 统一为该组路由添加认证中间件。
参数验证实现
ThinkPHP 支持使用验证器(Validate)对请求参数进行校验,推荐在控制器中调用。
1. 创建验证器:使用命令行生成
php think make:validate UserValidate
2. 编辑验证规则文件 app/validate/UserValidate.php:
namespace appvalidate; use thinkValidate; class UserValidate extends Validate { protected $rule = [ 'name' => 'require|max:25', 'email' => 'require|email', 'age' => 'number|between:1,120', ]; protected $message = [ 'name.require' => '姓名不能为空', 'email.email' => '邮箱格式错误', ]; protected $scene = [ 'create' => ['name', 'email', 'age'], 'update' => ['name', 'age'], ]; }
3. 在控制器中使用验证器:
namespace appcontrollerapiv1; use appvalidateUserValidate; use thinkexceptionValidateException; use thinkRequest; class User { public function create(Request $request) { try { validate(UserValidate::class) ->scene('create') ->check($request->param()); } catch (ValidateException $e) { return json(['msg' => $e->getError()], 400); } // 验证通过,执行业务逻辑 return json(['msg' => '创建成功'], 200); } }
结合路由分组与验证场景
在分组路由中,不同接口可对应不同验证场景。例如创建用户需验证全部字段,更新时可选验证。
通过 scene() 指定场景,灵活控制字段规则。
- 提交数据时自动触发对应场景验证;
- 配合中间件可提前处理 token、权限等;
- 错误信息以 JSON 返回,适合 API 接口规范。
基本上就这些,不复杂但容易忽略细节。
以上就是路由 thinkphp php js json cad app ai 邮箱 php 中间件 json thinkphp Token 接口 闭包