thinkphp6路由器详解

本文详细介绍了ThinkPHP6的路由配置,包括路由规则、请求类型、可选参数、完全匹配、额外参数、路由标识、变量规则、局部与全局变量、动态路由、路由到控制器及方法、路由跳转和模板文件渲染等核心概念,通过实例解析帮助开发者更好地理解和应用路由功能。

路由配置文件

在这里插入图片描述
所有的路由规则都在这个文件中配置

注册路由到控制器中到方法

在路由文件中定义规则

// 路由到Qipa控制器 ,且定义变量名称为id,在控制器read方法中接受时需保持一致
Route::rule('qipa/:id','qipa/read');

qipa控制器文件代码

在这里插入图片描述

<?php

namespace app\controller;

use app\BaseController;

class Qipa extends BaseController
{
    public function index()
    {
        return '我是奇葩控制器';
    }

    public function hello($name = 'ThinkPHP6')
    {
        return 'hello,' . $name;
    }
	//与路由规则中定义的变量名称保持一致,否则接受不到
    public function read($id)
    {
        return 'www.qipa250.com-read-id=' .$id;
    }
}


访问:http://mac.tp6.com/qipa/888

在这里插入图片描述

控制器中接受参数

// 路由到Qipa控制器read2方法
Route::rule('qipa/:id','qipa/read2');

qipa控制器中定义read2方法

//一定要引入reques否则不能使用
use think\facade\Request;


public function read2()
{
        echo 'read2-id:'.Request::param('id');
}

在这里插入图片描述

定义路由请求为get或post

// 路由到Qipa控制器 定义为get请求
Route::rule('qipa/:id','qipa/read','GET');

在这里插入图片描述

若是修改为post请求

// 路由到Qipa控制器 定义为post请求
Route::rule('qipa/:id','qipa/read','POST');

在浏览器中get请求访问时报错:
在这里插入图片描述

直接定义为get请求,将rule替换为get即可

// 路由到Qipa控制器 定义为get请求
Route::get('qipa/:id','qipa/read');

同样定义为post请求

Route::post('qipa/:id','qipa/read');

在浏览器中访问则会报错,因为不是post请求
在这里插入图片描述

路由规则设置可选参数

原路由规则设定参数为必填项

// 路由到Qipa控制器 定义为get请求
Route::get('read/:id','qipa/read2');

若是不传参数,则会报错:
在这里插入图片描述
因为定义的id为必填参数

修改为可选参数:

// 路由到Qipa控制器 定义为get请求
Route::get('read/[:id]','qipa/read2');

在浏览器中不加入id参数,访问:
在这里插入图片描述
传入id的值

在这里插入图片描述

完全匹配

在浏览器中增加访问,如下:

http://mac.tp6.com/read/250/hhh/bbb

在这里插入图片描述
会发现可以一直增加变量,我们需要修改规则为完全匹配,以id变量的值为结尾,在输入则报错:

Route::get('read/:id$','qipa/read2');

在这里插入图片描述
去掉多余参数,访问就正常了
在这里插入图片描述

额外参数

修改路由规则,增加额外参数,并且不用在浏览器中显示,直接传给qipa控制器中的read2方法

Route::get('read/:id','qipa/read2')->append(['url'=>'www.qipa250.com','name'=>'奇葩天地网']);

修改控制器的read2方法

 public function read2()
    {
        $params= Request::param();
        halt($params);
    }

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

路由标识name

路由规则定义name别名为read_info

Route::get('read/:id','qipa/read')->name('read_info');

qipa控制器中的两个方法

    public function read($id)
    {
        echo 'www.qipa250.com-read-id=' . $id;
    }

    public function read2()
    {
        echo url('read_info',['id'=>250]);
        echo '<br>';
        echo url('qipa/read',['id'=>888]);
    }

当我们在浏览器中访问read2时,可以看到
在这里插入图片描述
得到优化后到页面路径,我们分别访问:
在这里插入图片描述
在这里插入图片描述

路由设置变量规则

在配置文件中设置变量规则

在这里插入图片描述

    // 默认的路由变量规则
    //'default_route_pattern' => '[\w\.]+',
    //默认的路由变量规则以数字结尾 只传入数字,并且为一次以上
    'default_route_pattern' => '[\d\.]+',

我们在浏览器中访问:http://mac.tp6.com/read/250com
在这里插入图片描述
发现250后边到com没有了,是因为只允许输入数字,将其他过滤掉了

若是开启默认到变量规则,不限制

'default_route_pattern' => '[\w\.]+',

则会将com也打印出来
在这里插入图片描述

局部变量规则

将配置文件中的规则屏蔽

    // 默认的路由变量规则
    //'default_route_pattern' => '[\w\.]+',
    //默认的路由变量规则以数字结尾
    //'default_route_pattern' => '[\d\.]+',//只传入数字,并且为一次以上

在路由app.php文件中中针对不同的路由设置局部规则

Route::get('read/:id','qipa/read')->pattern(['id'=>'[\d]+']);

在这里插入图片描述
修改为

Route::get('read/:id','qipa/read')->pattern(['id'=>'[\w]+']);

在这里插入图片描述

加一个横杠

Route::get('read/:id','qipa/read')->pattern(['id'=>'[\w\-]+']);

在这里插入图片描述

全局变量规则

//设置全局变量规则
Route::pattern([
    'id'=>'\d+',
    'name'=>'[a-zA-Z]+'
]);

// 路由到Qipa控制器 定义为get请求
Route::get('read/:id','qipa/read');
// 路由到Qipa控制器 定义为get请求
Route::get('readbook/:name','qipa/readbook');

Qipa控制器

 public function read($id)
    {
        echo 'www.qipa250.com-read-id=' . $id;
    }
 public function readbook()
    {
       halt(Request::param());
    }

访问read
在这里插入图片描述
访问readbook,传入250数字,则报错
在这里插入图片描述

传入字母,则显示正常
在这里插入图片描述

组合变量

Route::get('read-<name>-<id>','qipa/readbook')->pattern(['name'=>'[a-zA-Z]+','id'=>'\d+']);

http://mac.tp6.com/read-qipa-250
在这里插入图片描述

http://mac.tp6.com/read-888-250
在这里插入图片描述

动态路由

动态路由,会将参数传递给控制器,并执行控制器中对应的方法

// 动态路由
Route::get('zhixing-<name>-<id>', 'qipa/:name')
    ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);

访问 http://mac.tp6.com/zhixing-readbook-250
在这里插入图片描述
http://mac.tp6.com/zhixing-read-250
在这里插入图片描述

也可以修改为,调用指定控制器的指定方法

// 动态路由
Route::get('zhixing-<control>-<name>-<id>', ':control/:name')
    ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);

http://mac.tp6.com/zhixing-qipa-read-250
在这里插入图片描述
http://mac.tp6.com/zhixing-qipa-readbook-250

在这里插入图片描述

路由到控制器

Route::get('qipa/:id', 'qipa/read');

在这里插入图片描述

action变量值作为操作方法传入

Route::get(':action/qipa/:id', 'qipa/:action');

将readbook作为action到值传入,就会访问qipa控制器中到readbook方法

http://mac.tp6.com/readbook/qipa/250

在这里插入图片描述
将read作为action到值传入,就会访问qipa控制器中到read方法
http://mac.tp6.com/read/qipa/250
在这里插入图片描述

路由到指定类到指定方法中

新建类文件,在

在这里插入图片描述

<?php
namespace app\server;

use think\facade\Request;


class News
{

    public  function read()
    {
        return 'read文章ID:' . Request::param('id');
    }

    public static function readbook()
    {
        $news_id = Request::param('id');
        return 'readbook文章ID:' . $news_id;
    }

}

定义路由

Route::get('new/:id', '\app\server\News@read');

http://mac.tp6.com/new/250
在这里插入图片描述

调用类到静态方法

Route::get('new/:id', '\app\server\News::readbook');

http://mac.tp6.com/new/250
在这里插入图片描述

路由跳转

//跳转到指定页面,并传递参数
Route::redirect('read/:id', 'http://mac.tp6.com/index.php/qipa/qiparead?id=:id','302');

qipa控制器增加qiparead方法

    public function qiparead()
    {
        echo 'www.qipa250.com-qiparead-id=' . $_GET['id'];
    }

访问http://mac.tp6.com/read/250 跳转到http://mac.tp6.com/index.php/qipa/qiparead?id=250 状态码为302
在这里插入图片描述

路由到模版文件

路由到模板
支持路由直接渲染模板输出。

// 路由到模板文件
Route::view('hello/:name', 'index/hello');

表示该路由会渲染当前应用下面的view/index/hello.html模板文件输出。

模板文件中可以直接输出当前请求的param变量,如果需要增加额外的模板变量,可以使用:

Route::view('hello/:name', 'index/hello', ['city'=>'shanghai']);

在模板中可以输出name和city两个变量。

Hello,{$name}--{$city}!

若是报错:
在这里插入图片描述
需要在根目录:
composer输入

composer require topthink/think-view

并赋予777权限,否则会报错:

mkdir(): Permission denied
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值