thinkphp5 路由规则详解 多层目录设置 多种目录设置方法

配置文件位置

路由设置文件在application目录的route.php

我们定义一个方法

public function hello($name = 'word')
	{
		echo "hello:".$name;
	}
默认访问地址
http://127.0.0.1/index.php/admin/index/dq/name/ssss/

设置后访问地址
http://127.0.0.1/index.php/hello/访问的参数.html
这里可以看出,明显地址短了很多

此时我们若访问下面的地址,也同样起作用
http://127.0.0.1/index.php/访问的参数.html

在route.php中设置路由第一种方式

route.php默认内容
return [
    '__pattern__' => [
        'name' => '\w+',
    ],
    '[hello]'     => [
        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
        ':name' => ['index/hello', ['method' => 'post']],
    ],

];
设置后
return [
    '__pattern__' => [
        'name' => '\w+',
    ],
    '[hello]'     => [
        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
        ':name' => ['index/hello', ['method' => 'post']],
    ],
	'hello/[:name]'     => ['admin/index/hello',['method' => 'get' , 'ext' => 'html']],

];
可以看到,在下面增加了一条
'hello/[:name]'     => ['admin/index/hello',['method' => 'get' , 'ext' => 'html']],
注:上面:name放在[]中,指这个参数是可选项,若没有放在[]中,是必填的参数

上方内容简略解读
上面的hello/[:name]指接收hello方法下的name值,并提交到admin/index/hello
只接收以get方式提交的值,要求访问的后缀是.html
基本上是这个意思吧~

双参数的路由设置

方法代码
public function today($year,$month)
	{
		echo "今天是 $year 年 $month 月";
	}

原访问地址
http://127.0.0.1/index.php/admin/index/today/year/2019/month/12
设置后访问地址
http://127.0.0.1/index.php/today/2019/12
route.php里面增加的规则
'today/:year/:month'     => ['admin/index/today',['method' => 'get'],['year'=>'\d{4}','month'=>'\d{2}']],

加入路由规则

在页面顶部引入use think\Url;
下面加入一个方法
public function url()
		{
			echo Url::build('url2','a=1&b=2');
			echo "<br>";
			echo url('url2','a=1&b=2');
			echo "<br>";
			echo url('url2',['a'=>1,'b'=>2]);
			echo "<br>";
			echo url('url2',array('a'=>1,'b'=>2));
			echo "<br>";
			echo url('admin/index/hello');
			echo "<br>";
			echo url('today/2019/07');
			echo "<br>";
		}
访问
http://127.0.0.1/index.php/admin/index/url
显示为
thinkphp5 路由规则详解 多层目录设置 多种目录设置方法

动态注册路由方式(第二种)

上面的是配置式路由的方式,接下来是动态注册路由方式,个人更倾向于这种,因为配置简洁明了
我们有一个hello方法
路径是:admin/Index/hello
public function hello()
	{
		return "动态注册路由方式";
	}
设置路由
#在route.php中引入配置文件
use think\Route;
#定义路由
Route::rule('h/c','admin/Index/hello');
上面定义路由中
  • h是我们定义的路径如定义为h,则访问题是127.0.0.1/h,若是定义为h/c,访问路径变成127.0.0.1/h/c
  • admin/Index/hello 是我们的控制器路径
访问路径
  • 未定义前我们访问的是 http://127.0.0.1/admin/index/hello
  • 定义后我们访问的是 http://127.0.0.1/h

Route::rule详细设置参数

Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');

路由地址的定义

路由地址用的是固定三段式写法,以下三段后面的是我们例子中所设置的

  • 第一段 模块名:api
  • 第二段 控制器名,在下方的例子中因我们的Banner方法在v1目录 ,所以TP采用目录.控制器名进行连接
  • 第三段 操作方法名:getBanner

但如果我们并没有将文件放在controller目录中,而是在该目录中新建了一个v1文件夹,上图如下

thinkphp5 路由规则详解 多层目录设置 多种目录设置方法

我们在路由中设置的规则便是如下

Route::get('banner/:id','api/v1.Banner/getBanner');


api/v1.Banner/getBanner这一段便是路由的三段式,这是固定的格式。
 

请求类型

请求类型:GETPOSTDELETEPUT*号默认缺醒的情况下,便是*号,代表接收任何类型的
如我们定义一个只接收post请求的路由
Route::rule('up','admin/Index/up','post');
我们先用get方式请求
thinkphp5 路由规则详解 多层目录设置 多种目录设置方法
出现如上错误

我们接着用post方式请求
thinkphp5 路由规则详解 多层目录设置 多种目录设置方法
可以进行正常访问
支持多种提交方式
Route::rule('up','admin/Index/up','post|get');
想设置几种,便用|线隔开便可
http请求类型快捷写法
Route::get('sesn','admin/Index/sesn');

路由参数

如我们当前是http访问,想只让https的才可访问则设置成['https'=>true]
Route::rule('up','admin/Index/up','post',['https'=>true]);
官网提供的参数
参数 说明
method 请求类型检测,支持多个请求类型
ext URL后缀检测,支持匹配多个后缀
deny_ext URL禁止后缀检测,支持匹配多个后缀
https 检测是否https请求
domain 域名检测
before_behavior 前置行为(检测)
after_behavior 后置行为(执行)
callback 自定义检测方法
merge_extra_vars 合并额外参数
bind_model 绑定模型(V5.0.1+
cache 请求缓存(V5.0.1+
param_depr 路由参数分隔符(V5.0.2+
ajax Ajax检测(V5.0.2+
pjax Pjax检测(V5.0.2+

传参的处理

我们定义一个csi方法
	public function csi($id,$name)
	{
		return $id ."<br>". $name;
	}
我们定义一个路由
Route::rule('csi','admin/Index/csi');
访问路径并进行传参
  • http://127.0.0.1/csi/id/23/name/liu
在路由中直接对传参配置
路由表达式后面/+:参数名,如有一个id的参数,实际写也就是/:id
Route::rule('csi/:id/:name','admin/Index/csi');
访问路径并传参变成
  • http://127.0.0.1/csi/23/liu

只用路由模式访问

默认的控制器方法名的方式(PACH_INFO)与路由模式是全开,如我们没定义路由模式,则会使用PACH_INFO模式

但若我们想强制性的使用路由模式,那我们可以在application-config.php中定义
// 是否强制使用路由
    'url_route_must'         => false,
将上面的设成true,便是开启强制路由。


评论

大侠名号:   验证暗号: 点击我更换图片

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND