路由基础定义
静态路由
动态路由

前言:本篇例子,均在多应用模式执行

路由须知

参考资料: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");

图 ↓

  1. 路由动态传参,路由会自动对应绑定传值,但不可顺序错乱
  2. 路由中定义的 /: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 路由参数 官方文档

  1. 调用方法名设置
<?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("");
  1. 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;
    }
}

图 ↓