首页 > 服务端语言 > ThinkPHP 入门教程 > ThinkPHP 路由验证

路由验证

本小节主要介绍如何在路由验证请求的合法性,主要包括请求的变量规则、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请求,如 .htmltxt,路由中间件一般用于处理中间层的业务逻辑,如 权限验证

Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6

本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈