ThinkPHP6路由配置详解

ThinkPHP6是一款强大的PHP框架,拥有便捷的路由功能,可以轻松实现URL路由配置;同时支持多种路由模式,如GET、POST、PUT、DELETE等等。本文将介绍如何使用进行路由注册(包括基础:路由定义、请求方式、规则表达式和参数传递),路由配置

一.路由使用注意事项 

①路由的使用首先要使用符合规范的命名空间,这样才能控制器才能正常访问;

②然后还要通过引用门面中的路由方法

多应用模式下,分为应用路由全局路由应用内部可以创建admin/route/app.php定义应用内部路由;而根目录下route/app.php是全局路由,一般用配置默认路由,也就是用户访问路由;应用路由的执行要优先于全局路由,也就是程序会先执行应用内的路由。

④在config/route.php文件是全局路由配置,如是否设置强制路由,也就是只能通过路由访问

 // 是否强制使用路由
    'url_route_must'        => true,

 二.路由配置文件,注册路由到控制器中到方法

在路由文件中定义规则,所有的路由规则都在这个文件(根目录下route/app.php是全局路由,应用内部可以创建admin/route/app.php定义应用内部路由,程序会先执行应用内的路由)中配置,

在根目录route/app.php文件中定义全局路由,主要用于前台访问

创建应用内部路由,在admin应用下创建route/app.php,并加入以下代码

三.路由基本知识

3.1. 路由注册

3.1.1路由注册需要使用Route类

use think\facade\Route
3.1.2基础路由定义
# Route::rule('路由表达式' , '路由地址' , '请求方式')
Route::rule('test' , 'test/test' , 'get');

3.1.3 常用于项目中的路由分为五种:get/post/put/delete/any

Route::get('new/<id>','News/read'); // 定义GET请求路由规则,常用于获取数据库数据
Route::post('new/<id>','News/update'); // 定义POST请求路由规则,常用于前端数据提交
Route::put('new/:id','News/update'); // 定义PUT请求路由规则
Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则
Route::any('new/:id','News/read'); // 所有请求都支持的路由规则

3.1.4在ThinkPHP6中,路由配置文件位于route目录下,通常为route/app.php。基本路由配置包括HTTP请求方法、路由地址和路由参数。以下是一个基本路由配置示例:

use think\route\Rule;
// 定义GET请求的路由
Route::get('hello', 'index/hello');
// 定义POST请求的路由
Route::post('hello', 'index/hello');

3.2ThinkPHP6路由模式

1. GET方式:GET方式是用于获取数据的一种方式,常用于页面展示。在ThinkPHP6中,可以使用如下代码来配置GET方式路由:

Route::get('路由地址', '控制器/方法');

Route::get('index', 'Index/index');

这段代码将路由地址‘index’映射到控制器‘Index’的‘index’方法

2. POST方式:POST方式是用于提交数据的一种方式,常用于数据的添加、修改、删除等操作。在ThinkPHP6中,可以使用如下代码来配置POST方式路由:

Route::post('路由地址', '控制器/方法');

Route::post('user/add', 'User/add');

这段代码将路由地址‘user/add’映射到控制器‘User’的‘add’方法

3. PUT方式:PUT方式是用于修改数据的一种方式,常用于数据的更新操作。在ThinkPHP6中,可以使用如下代码来配置PUT方式路由:

Route::put('路由地址', '控制器/方法');

Route::put('user/update', 'User/update');

这段代码将路由地址‘user/update’映射到控制器‘User’的‘update’方法。

4. DELETE方式:DELETE方式是用于删除数据的一种方式,常用于数据的删除操作。在ThinkPHP6中,可以使用如下代码来配置DELETE方式路由:

Route::delete('路由地址', '控制器/方法');

Route::delete('user/del', 'User/del');

这段代码将路由地址‘user/del’映射到控制器‘User’的‘del’方法。

3.3ThinkPHP6路由参数

在ThinkPHP6中,路由参数是非常重要的一部分,路由参数用于接收URL中的动态数据。在定义路由时,可以通过以下方式指定参数,将变量作为参数传递给控制器方法。

3.3.1. 基本用法

在路由中使用参数,可以使用如下代码:

Route::get('路由地址/:变量名', '控制器/方法');

Route::get('user/:id', 'User/index');

这段代码将路由地址‘user/:id’映射到控制器‘User’的‘index’方法,并将id作为参数(其中:id表示一个路由参数,它将匹配URL中的对应部分。)传递给该方法。

3.3.2. 参数限制

在路由中传递参数时,有时候需要对参数进行限制。在ThinkPHP6中,可以使用正则表达式对传递的参数进行限制。例如,限制参数只能为数字:

Route::get('user/:id(d+)', 'User/index');

这样在传递参数时,如果参数不符合要求,则会抛出异常。

// 定义带有参数的路由
Route::get('user/:id', 'user/info');

# 访问路径 <hostname>/test/id
# 获取路由传递的参数
public function test($id){
    return $id;
}

3.4、ThinkPHP6路由分组

在进行路由配置时,有时需要对路由进行分类,方便管理和维护。在ThinkPHP6中,可以使用路由分组功能来实现。

Route::group('分组名称', function(){
    Route::get('路由地址', '控制器/方法');
});

Route::group('admin', function(){
    Route::get('user', 'Admin/User/index');
    Route::post('user', 'Admin/User/add');
    Route::delete('user/:id', 'Admin/User/del');
});

这段代码将所有路由地址以‘admin’为前缀进行分组,其中‘user’为子路由,映射到控制器‘Admin/User’的相应方法。

// 定义路由分组
Route::group('admin', function () {
    Route::get('index', 'admin/index');
    Route::get('login', 'admin/login');
});

路由分组可以将多个具有相同前缀的路由分为一组,提高路由管理的效率。以下是一个路由分组的示例:

3.5ThinkPHP6路由快捷方法

在ThinkPHP6中,有一些快捷的路由方法可以方便使用者进行路由配置。

3.5.1. REST接口路由

REST即表述性状态传递,是一种架构风格,常用于Web接口开发。在ThinkPHP6中,可以使用REST接口路由进行配置。

Route::resource('路由地址', '控制器');

Route::resource('user', 'User');

这段代码将路由地址‘user’映射到控制器‘User’的相应方法,即获取用户信息、添加用户、修改用户、删除用户等操作。

3.5.2. 全局路由

全局路由是在应用初始化时进行自动路由配置,常用于特殊情况下的路由需求。

Route::miss('路由地址');

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

这段代码将所有未匹配的路由地址映射到控制器‘Error’的‘index’方法,即出现404错误时前往此页面进行处理。

3.6、路由命名与反向解析


为方便在代码中引用路由,可以为路由设置命名。同时,ThinkPHP6支持路由反向解析,通过路由名称生成URL。以下是一个示例:

// 定义命名路由
Route::get('user/:id', 'user/info')->name('user_info');
// 生成URL
$url = url('user_info', ['id' => 1]);

3.7路由变量

Route::rule('/', 'index'); // 首页访问路由
Route::rule('my', 'Member/myinfo'); // 静态地址路由
Route::rule('blog/:id', 'Blog/read'); // 静态地址和动态地址结合
Route::rule('new/:year/:month/:day', 'News/read'); // 静态地址和动态地址结合
Route::rule(':user/:blog_id', 'Blog/read'); // 全动态地址
3.8路由标识
# 快速生成url地址可以在路由定义时生成指定且唯一的标识
Route::post('test' , 'test/test')->name('test_test');
​
# 调用
url('test_test');
# 如果不用标识 则会以路由地址作为标识
url('test/test');

方式一:使用路由标识

Route::rule('blog/:id','blog/read')->name('blog_read');
Route::buildUrl('blog_read', ['id' => 5, 'name' => 'thinkphp']);
//或者助手函数
url('blog_read', ['id' => 5, 'name' => 'thinkphp']);

在视图中使用

{:url('blog_read', ['id' => 5, 'name' => 'thinkphp']);}

式二:使用路由地址

假设定义如下路由

Route::get('blog/:id' , 'blog/read');
Route::buildUrl('/blog/5');

在视图中要传递自定义参数用.来拼接

{:url('/blog/'.$article->id)}

3.9路由地址

3.9.1控制器/操作
# 访问的是Test内的test方法
Route::get('test' , 'test/test');
​
# 支持多级控制器
# 访问的是controller内的Test类test方法
Route::get('test' , 'controller.test/test');
3.9.2路由到类
# 路由访问不一定是控制器的类 可以访问别的类
# \完整类名@方法名 或 \完整类名::方法名
Route::get('test' , '\app\controller\Test::test');
3.9.3路由重定向
# Route::redirect('路由表达式' , '重定向地址' , 状态码);
# 跳转到百度首页
Route::get('test' , 'http://baidu.com');
# 跳转到 <hostname>/test/test http状态码为302
Route::get('test' , '/test/test' , 302);
3.9.4路由闭包
# 路由闭包
Route::get('test' , function(){
    return ;
});
# 闭包传递参数
Route::get('test/:id' , function($id){
    return 'id : ' . $id;
});
# 依赖注入
Route::get('test/:id' , function(Test $test , $id){
    return $test->where('id' , $id)->find;
});

# 用法示例
# 访问后缀必须为html
Route::get('test' , 'test/test')->ext(html);
# 批量设置路由参数
Route::get('test' , 'test/test')->option(['ext' => 'html' , 'https' => true]);
3.9.5url后缀
# ext() 参数
# false => 禁止伪静态访问
# ' ' => 允许所有后缀访问(默认)
# html => 只允许设置伪静态后缀
# html|php => 允许多个伪静态后缀
 
# 访问路径<hostname>/test.html 或 <hostname>/test.php
Route::get('test' , 'test/test')->ext('html|php');
# 如果ext方法不传值则表示不支持后缀访问
 
# denyExt() => 和ext相反
# 如果ext方法不传值则表示必须用后缀访问

3.9.6. 路由中间件
# middleware()
Route::get('test' , 'test/test')->middleware(\app\middleware\Auth::class);
 
# 注册路由全局中间件
# config/route.php 文件内
'middleware'    =>    [
    app\middleware\Auth::class,
    app\middleware\Check::class,
],

路由中间件可以在路由执行前后添加额外的处理逻辑。在ThinkPHP6中,可以通过以下方式定义路由中间件:
// 定义中间件
Route::get('hello', 'index/hello')->middleware('checkLogin');
3.9.7. 路由分组
# group()
# 访问路径 <hostname>/group/test/
Route::group('group' , function(){
    Route::get('test' , 'test/test');
});
 
# 路由分组 组内路由会继承分分组的属性 例如ext
Route::group('group' , function(){
    # test路由后缀必须为html
    Route::get('test' , 'test/test');
})->ext('html');
 
# 路由分组支持嵌套
Route::group(function(){
	Route::('shop' , function(){
    	Route::get('buy' , 'shop/buy');
    })
    Route::('user' , function(){
    	Route::get('list' , 'uset/list');
    })
})->ext('html');

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值