路由验证
本小节主要介绍如何在路由验证请求的合法性,主要包括请求的变量规则、url后缀、路由中间件。
1.变量规则
这里以之前获取学生列表接口为例,若要在路由层面增加变量的过滤规则,可以使用pattern 方法,如下:
//获取学生列表接口
Route::get('students/:name', 'app\controller\Study\StudentController@getStudents')->pattern(['name' => '[\w|\-]+']);
如下图所示:

Tips: 其中
:name表示路由后面可以跟变量name,[\w|\-]+是一个正则表达式,对name字段匹配。
下面在 getStudents 方法中打印 name 变量,并返回正确的请求结果:
/**
     * 获取学生列表
     * @return \think\response\Json
     * @throws \think\db\exception\DbException
     */
    public function getStudents()
    {
        halt($this->request->param('name'));
        //每页条数
        $size = (int)$this->request->param('size', 15);
        $students = StudentModel::where('status', 1)->order('created_at DESC')->paginate($size);
        return json($students);
    }
如下图所示:

请求正确结果如下图:

请求不满足正则匹配的要求如下图:

2.URL 后缀验证
若想要某个请求的 url 的后缀满足某种后缀可以使用 ext() 方法,如下:
//获取学生列表接口
Route::get('students/:name', 'app\controller\Study\StudentController@getStudents')->ext('html');
如下图所示:

下面演示返回正确的情况:

下面演示返回错误的情况:

3.路由中间件
首先使用如下命令生成一个中间件 Auth:
php think make:middleware Check
如下图所示:

然后Auth中处理特定的请求,如下图贴出简单的权限验证的情况:
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        $token = $request->header('access-token');
        if($token != '123456abc'){
            throw new HttpException(401,"没有访问权限");
        }
        return $next($request);
    }
如下图所示:

然后定义如下路由:
//获取学生列表接口
Route::get('students/:name', 'app\controller\Study\StudentController@getStudents')->ext('html')->middleware(\app\Middleware\Auth::class);
如下图所示:

如下图演示返回正确的请求:

如下图演示返回错误的请求:

4.小结
本小节介绍了常见的路由验证,其中变量规则验证一般用于验证 url 中表示请求参数的变量,url 后缀验证主要用于验证不满足指定后缀的 url请求,如 .html、txt,路由中间件一般用于处理中间层的业务逻辑,如 权限验证。
Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6
          本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
