ThinkPHP 6.1 在多应用模式下实现API路由分组+中间件验证业务
目录
1.创建中间件文件
2.迁移中间件到子应用目录中
3.编辑中间件验证业务
修改命名空间
编写handle处理代码
4.注册中间件
编辑中间件文件
TP内置中间件
5.设置路由分组
优化相同控制器前缀
最终效果:
1.创建中间件文件
首先我们不知道文件里面都有哪些方法和设置,并且也没有直接创建到多应用的命令,只能先执行全局的中间件创建命令
$ php think make:middleware ApiCheck
Middleware:app\middleware\Check created successfully.
可见app目录下新增了一个middleware文件夹,里面有ApiCheck.php文件
2.迁移中间件到子应用目录中
即把middleware移动到index目录中,文件层级如下:
3.编辑中间件验证业务
修改命名空间
namespace app\middleware;
改为
namespace app\index\middleware;
编写handle处理代码
public function handle($request, \Closure $next)
{
// 测试使用 若触发此规则 则跳转回首页 否则进入下一个流程
if ($request->param('name') == 'think6') {
return redirect('/');
}
return $next($request);
}
4.注册中间件
编辑中间件文件
打开app/index/config/middleware.php文件
<?php
// 中间件配置
return [
// 别名或分组
'alias' => [
'apiCheck' => [
think\middleware\SessionInit::class,// session初始化
app\index\middleware\ApiCheck::class // api请求验证
]
],
// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
'priority' => [],
];
优先级可不设置,默认按照分组顺序执行
TP内置中间件
中间件类 | 描述 |
think\middleware\AllowCrossDomain | 跨域请求支持 |
think\middleware\CheckRequestCache | 请求缓存 |
think\middleware\LoadLangPack | 多语言加载 |
think\middleware\SessionInit | Session初始化 |
think\middleware\FormTokenCheck | 表单令牌 |
默认都没有定义,使用可以在应用的middleware.php文件中、路由或者控制器中定义这些中间件。
5.设置路由分组
设置一个分组来处理Api验证,apiCheck是之前设置的别名
Route::get('/', 'User/index')->name('user.index');
Route::group('api', function(){
// 登录
Route::get('login', 'User/login');
// 注册
Route::get('register', 'User/register');
})->middleware('apiCheck');
访问地址为:http://serverName/api/login
优化相同控制器前缀
因为登录和注册都有共同的控制器,所以可以优化为:
Route::group('api', function(){
// 登录
Route::get('login', 'login');
// 注册
Route::get('register', 'register');
})->prefix('User/')->middleware('apiCheck');
最终效果:
访问http://serverName/api/login
访问http://serverName/api/login?name=think6
访问http://serverName/api/register
访问http://serverName/api/register?name=think6