thinkphp6 路由与中件间的使用


前言

其实thinkphp6路由比较灵活 相比于laravel 框架强制路由相比 各有所长吧

访问模式:

PATHINFO模式(TP默认)
http://localhost/appName/index.php/moduleName/actionName/id/1/

REWRITE模式 (重写模式)
http://localhost/appName/moduleName/actionName/id/1/

与pathinfo模式相比隐藏了入口文件index.php,用web服务器(apache、nginx等)来配置。

+ Compatibility mode(兼容模式)

http://localhost/appName/?s=/module/action/id/1/

服务器不能很好地支持PATHINFO模式而又不想用普通模式可以试试这个。


一、如何实现thinkphp自定义资源路由?

以下是我自己写的的资源路由 (多应用模式)

Route::resource('blog', 'app\\demo\\controller\\Api');

二、如何实现thinkphp分组路由

1.tp6路由分组问题

  1. 使用路由分组,虽然实际访问到的路由指向没有问题,但是使用php think route:list 打印的路由显示并不是完整路由
  2. 分组嵌套中的prefix方法,不能继承上级的prefix
  3. prefix 添加路由前缀名称

代码如下:

Route::get('/', 'index.Index/index');
Route::group('admin', function () {
    Route::group('index', function () {
        Route::get('test1', 'test1');
    // })->prefix('Index/');
    })->prefix('admin.Index/');  // 此处不能继承上级prefix('admin.'),必须写全
    Route::get('login/test3', 'Login/test3');
})->prefix('admin.');
Route::get('admin/login/test4', 'admin.Login/test4');

效果图如下:
在这里插入图片描述

三、如何实现thinkphp分组路由中添加中件间

代码如下:

<?php
declare (strict_types = 1);

namespace app\middleware;

use think\response\Json;
use tools\jwt\Token;

class IsLogin
{
     * 处理请求
     *
     * @param $request
     * @param \Closure $next
     * @return mixed|Json
     */
    public function handle($request, \Closure $next)
    {
        //接收token  如果没有返回登录
        if (!$request->param('token')){
            return json(['code' => 500,'mgs' => '清先登录!']);
        }
        //如果有token  则解析这个token
        $bool = Token::check('111',$request->param('token'));
        //对象转换数组
        //方法一  效率较低  代码冗余
        $info1 = json_encode($bool['data']);
        $info  = json_decode($info1,true);

//        print_r($info);

        $array = $this->object2array($bool['data']);

//        print_r($array);
        //方法二  性能优化 减少了代码冗余
        $obj   = json_decode(json_encode($bool['data']),true);
        if (!$obj['data'])
//        print_r($obj);
//        print_r($info);
        return $next($request);
    }

    /**
     * 对象转数组
     *
     * @param mixed $object 对象数据
     * @return mixed
     */
    public static function object2array(&$object) {
        $object =  json_decode( json_encode( $object),true);
        return  $object;
    }
}

//分组路由与中间件的应用 (多应用模式)
//group (第一个参数路由组名称 ,)
Route::group('login', function(){  

    Route::post('zhanghao/denglu/','app\\demo\\controller\\Api@make');
    Route::get('read/{id}','app\\demo\\controller\\Api@read');

})->middleware(\app\middleware\IsLogin::class);

四、普通路由

  Route::post('zhanghao/denglu/','app\\demo\\controller\\Api@make');
  Route::get('read/{id}','app\\demo\\controller\\Api@read');

总结

以上的代码亲身测试可用的 本人小白刚刚学习TP6没有多久 希望有大佬指点迷津
给我一些学习的意见

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ThinkPHP6 中,路由配置主要有两种方式:注解路由和配置文件路由。 #### 1. 注解路由 注解路由是一种基于注释的路由方式,可以在控制器方法上添注释来定义路由规则。例如: ```php // 注解路由示例 namespace app\controller; use think\annotation\Route; class Index { /** * @Route("/") */ public function index() { return 'Hello, ThinkPHP6!'; } /** * @Route("/hello/:name") */ public function hello($name) { return 'Hello, ' . $name . '!'; } } ``` 在上面的示例中,我们使用了 `think\annotation\Route` 注解,通过 `@Route` 注释来定义路由规则。例如,在 `index()` 方法上添了 `@Route("/")` 注释,表示将 `/` 路径映射到 `index()` 方法上;在 `hello($name)` 方法上添了 `@Route("/hello/:name")` 注释,表示将 `/hello/:name` 路径映射到 `hello($name)` 方法上,并将 `:name` 参数作为方法的参数传递。 #### 2. 配置文件路由 配置文件路由是一种基于配置文件的路由方式,可以在应用的 `route` 目录下创建 `route.php` 文件,来定义路由规则。例如: ```php // route/route.php use think\facade\Route; Route::get('/', 'index/index'); Route::get('/hello/:name', 'index/hello'); ``` 在上面的示例中,我们通过 `use think\facade\Route` 引入了 `Route` 门面类,并使用 `Route::get()` 方法来定义路由规则。例如,`Route::get('/', 'index/index')` 表示将 `/` 路径映射到 `app\controller\Index` 控制器的 `index()` 方法上。`Route::get('/hello/:name', 'index/hello')` 则表示将 `/hello/:name` 路径映射到 `app\controller\Index` 控制器的 `hello($name)` 方法上,并将 `:name` 参数作为方法的参数传递。 以上是 ThinkPHP6 中路由配置的基本介绍,如果需要更多的路由配置方式,可以参考官方文档:[路由](https://www.kancloud.cn/manual/thinkphp6_0/1037479)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值