路由基础定义
静态路由
动态路由
前言:本篇例子,均在多应用模式执行
路由须知
参考资料:TP6 路由介绍官方文档
须知一:
TP6 会自动加载 route 目录下所有的文件,把所有的路由规则都写在一个文件里,和写在多个文件里,本质上是一样的。
区分多个文件来写,仅为了维护更方便。
须知二:
由于 TP6 默认单应用模式
所以 TP6 的「单应用」模式与「多应用」模式的路由目录架构不完全一样
须知三:
每个单独应用,都可以进行单独的路由配置
只需要在应用目录下创建 /config/route.php 文件进行路由配置
在单应用关闭路由功能,只需要在 /congif/app.php 设置 'with_route' => false
index应用下,目录结构 ↓
一般情况下,基本不需要
路由定义
参考资料:TP6 路由定义 官方文档
文件路径(多应用模式)
1.基础使用
index.php 代码 ↓
<?php
namespace app\index\controller;
use app\BaseController;
class Index extends BaseController
{
public function snail($name = "Cry",$username = "路由测试"){
return "棒棒哒~~".$name."恭喜你,".$username.",跳转成功";
}
}
路由定义代码 ↓
<?php
use think\facade\Route;
//基础设置,get 访问
Route::rule("snail1","index/index/snail","get");
2.路由动态传值
动态传值代码 ↓
<?php
use think\facade\Route;
//基础设置,动态传参
//两种方法等同
Route::rule("snail1/:name/:username","index/index/snail","get");
Route::rule("snail1/<name>/<username>","index/index/snail","get");
图 ↓
- 路由动态传参,路由会自动对应绑定传值,但不可顺序错乱
- 路由中定义的 /:name/:username 参数,为必传参数,如果缺少,则报错
3.动态传值,可选参数
<?php
use think\facade\Route;
//基础设置,动态传参
//两种方法等同
Route::rule("snail1/:name/:username/[:nickname]","index/index/snail","get");
Route::rule("snail1/<name>/<username>/<nickname?>","index/index/snail","get");
在不传 nickname 变量情况下,也不会报错
4.路由参数
参考资料:TP6 路由参数 官方文档
- 调用方法名设置
<?php
use think\facade\Route;
//仅允许 html 与 shtml 后缀访问
Route::rule("snail1/:name/:username/[:nickname]","index/index/snail","get")->ext("html|shtml");
//禁止掉无后缀访问
Route::rule("snail1/<name>/<username>/<nickname?>","index/index/snail","get")->denyExt("");
- option 批量设置
<?php
use think\facade\Route;
Route::rule("snail1/<name>/<username>/<nickname?>","index/index/snail","get")
->option([
//禁止空后缀
"deny_ext" => "",
//仅允许 html 与 shtml 后缀
"ext" => "html|shtml",
//禁止https 访问
"https" => false,
//设置访问域名
"domain" => "127.0.0.1"
]);
option() 数组格式数据
5.路由分组
参考资料:TP6 路由分组 官方文档
简化路由定义,提高路由匹配效率
<?php
use think\facade\Route;
Route::group("snail1",function(){
Route::rule(":name","index/index/snail");
Route::rule(":username","index/index/snail");
})
->ext("html|shtml")
->https(false)
->pattern([
"name" => "\d+",
"username" => "\w+"
])
;
6.注解路由
参考资料:TP6 注解路由 官方文档
注意:需要进入到项目根目录下然后再执行
composer require topthink/think-annotation
注解路由,可以直接在「控制器」文件内写
注解路由需要 use think\annotation\Route;
以下是 index.php 文件代码 ↓
<?php
namespace app\index\controller;
use app\BaseController;
use think\annotation\Route;
class Index extends BaseController
{
public function index(){
return "Index";
}
/**
* @param string $name
* @param string $username
* @param string $nickname
* @return string
* @Route("snail1/:name/:username/[:nickname]",method="GET",https=0,ext="html|shtml",deny_ext="")
*/
public function snail($name = "Cry",$username = "路由测试",$nickname = ""){
return "棒棒哒~~name=".$name.",恭喜你,username=".$username.",跳转成功,nickname=".$nickname;
}
}
图 ↓