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路由分组问题
- 使用路由分组,虽然实际访问到的路由指向没有问题,但是使用php think route:list 打印的路由显示并不是完整路由
- 分组嵌套中的prefix方法,不能继承上级的prefix
- 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没有多久 希望有大佬指点迷津
给我一些学习的意见