路由



路由是应用开发中比较关键的一个环节,其主要作用包括但不限于:

  • 让URL更规范以及优雅;
  • 隐式传入额外请求参数;
  • 统一拦截并进行权限检查等操作;
  • 绑定请求数据;
  • 使用请求缓存;
  • 路由中间件支持;

路由解析的过程一般包含:

  • 路由定义:完成路由规则的定义和参数设置;
  • 路由检测:检查当前的URL请求是否有匹配的路由;
  • 路由解析:解析当前路由实际对应的操作(方法或闭包);
  • 路由调度:执行路由解析的结果调度;

掌握路由主要是要掌握路由定义及参数设置,其它环节是由系统自动完成的。

 

下面直接看一个实例

use think\facade\Route;
use app\admin\middleware\CheckRestAdminRequestParams;

Route::group('admin',function (){

    Route::group('v1',function (){

        //不需要token的
        Route::group(function (){
            Route::post('user/login','manage.v1.Login/doLogin');
        });


        //需要token的
        Route::group(function (){
          

            Route::group('user',function (){

                Route::get('list','manage.v1.user/getList');//用户列表
                Route::get('info','manage.v1.user/getInfo');//用户详情
                Route::post('del','manage.v1.user/delUser');//删除用户
                Route::post('edit','manage.v1.user/editUser');//修改资料
                Route::post('add','manage.v1.user/addUser');//添加用户
            });

            //商品分类管理
            Route::group('goods_cat',function (){

                Route::get('list','manage.v1.GoodsCat/getList');
                Route::get('info','manage.v1.GoodsCat/info');
                Route::post('del','manage.v1.GoodsCat/del');
                Route::post('edit','manage.v1.GoodsCat/edit');
                Route::post('add','manage.v1.GoodsCat/add');
                Route::post('change_status','manage.v1.GoodsCat/changeStatus');

            });
       
           
        })->middleware(\app\admin\middleware\JwtAdminLoginMiddleware::class);
    });

})->allowCrossDomain([
    'Access-Control-Allow-Origin'        => '*',
    'Access-Control-Allow-Credentials'   => 'true',
    'Access-Control-Max-Age'             => 1800,
    'Access-Control-Allow-Headers'       => 'X-Requested-With,Content-Type',
    'Access-Control-Allow-Methods'       => 'GET,POST,OPTIONS'
])->middleware(CheckRestAdminRequestParams::class);

1 首先了解路由分组

路由分组功能允许把相同前缀的路由定义合并分组,这样可以简化路由定义,并且提高路由匹配的效率,不必每次都去遍历完整的路由规则(尤其是开启了路由延迟解析后性能更佳)。

 

Route::group('v1', function () {
  
})

 

2 跨域请求

跨域请求一般会发送一条OPTIONS的请求,一旦设置了跨域请求的话,不需要自己定义OPTIONS请求的路由,系统会自动加上。

如果某个路由或者分组需要支持跨域请求,可以使用

->allowCrossDomain([
    'Access-Control-Allow-Origin'        => '*',
    'Access-Control-Allow-Credentials'   => 'true',
    'Access-Control-Max-Age'             => 1800,
    'Access-Control-Allow-Headers'       => 'X-Requested-With,Content-Type',
    'Access-Control-Allow-Methods'       => 'GET,POST,OPTIONS'
])

 

V6.0.3+版本开始增加了默认的预检缓存有效期(默认为30分钟),你可以自定义有效期

  'Access-Control-Max-Age'             => 600,

 

MISS路由

Route::miss('miss/index');

 

class Miss
{
    public function index(){
        return '路由miss';
    }
}

 

当访问的路由不存在时,会自动跳转到Miss/index

 

 

 



原文:/index.htmp/manual/info/98.html

Baidu
sogou