ThinkPHP5.0教程学习04:TP5框架的URL路由规则与配置技巧

编程入门 行业动态 更新时间:2024-10-26 16:24:50

学习教程来源于:
php中文网 ThinkPHP5 视频教程
ThinkPHP5.0完全开发手册

URl请求的执行流程:
用户请求->路由解析->调度请求->执行操作->响应输出

路由作用:
1.根据事先定义的路由规则,检验URL请求,确定执行或者拒绝
2.路由规则可自定义,隐藏了原URL地址,使得访问更安全,地址更优雅

路由规则:
1.路由规则写在与应用配置同级的route.php文件中;
2.路由规则主要使用路由类:Route::rule()方法注册;

路由模式

1.普通模式
配置:'url_route_on'=>false
访问:全部采用PATH_INFO格式
2.混合模式(默认)
配置:'url_route_on'=>true,'url_route_must'=>false
已注册用路由访问,未注册仍用PATH_INFO访问
3.强制模式
配置:'url_route_on'=>true,'url_route_must'=>true
全部访问必须采用路由模式,包括首页’/’

强制模式一旦开启,所有的路由都需要自定义路由规则

路由注册

1.动态方法
Route::rule('路由规则','路由地址','请求类型',[路由参数],[变量规则]);
2.配置数组(配置文件方式)
return [
‘路由规则’=>‘路由地址’,
‘路由规则’=>[‘路由地址’,[路由参数],[变量规则]]
];

路由规则

用户用来最终访问的URL地址,并非原始URL地址
路由标识符/:变量名1/:变量名2/[:可选变量名]
静态部分+动态部分

路由地址

用户用路由规则访问页面时,真实跳转到的地址
路由地址的种类:
1.路由到:模块/控制器/操作
Route::rule('路由地址','模块/控制器/操作')
①可访问控制器:'url_controller_layer'=>'controller'
②按从右到左的顺序进行地址解析:操作->控制器->模块
③支持额外参数(查询方式):?变量名1=值&变量名2=值2...

2.路由到:操作方法
Route::rule('路由规则','@模块/控制器/操作');
①跳过模块初始化,直接执行控制器中的方法
②模块初始化:配置文件和公共文件(不会被加载);
③调用视图时必须设置完整模板文件的路径。

3.路由到:类的方法(动态与静态)
Route::rule('路由规则','\完整命名空间\类名@动态操作');
Route::rule('路由规则','\完整命名空间\类名::静态操作');
①类必须创建在应用目录或子目录中;
②静态方法支持外部动态访问,但建议在语法上分开;
③为了项目闺房,除非不得已,否则尽可能少用

4.路由到:重定向地址(301)
Route::rule('路由规则','重定向地址')
①重定向地址:’/‘或者’http://‘开头的外部地址
②’/’:是以当前可访问的Web目录开始:如’public’
③外部地址是301跳转,适用于网站迁移

5.路由到:闭包函数
Route::rule('路由规则',function([参数]){ //闭包函数代码 });
①闭包就是函数中的函数,或方法中的方法
②闭包函数可以接受通过路由规则传过来的参数
③不在执行任何操作,相当于把方法直接定义在参数中。

路由参数

用来验证当前路由规则是否有效的重要依据;
1.请求类型:['method'=>'get|post']
最常用的是GET和POST,其他(delete/put等)
①如注册方法已声明类型则无需设置:Route::get()/post()
Route::rule()/any():['method'=>'get|psot'];
③使用路由配置文件数组定义:['method'=>'get|post'];

2.URL后缀:['ext'=>'html|shtml']/['deny_ext'=>'php']
限定可访问路由规则的URL后缀名称,默认为html
①允许的URL后缀:['ext'=>'html|shtml']
②禁止的URL后缀:['deny_ext'=>'jpg|png']
③允许URL后缀为空:['ext'=>'']
④禁止的URL后缀为空:['deny_ext'=>'']

3.回调函数:['callback'=>'回调函数名称']
当回调函数返回true则路由规则有效,否则无效
①回调函数写在应用公共方法中:common.php;
②语法:['callback'=>'回调函数名称'];

4.域名检测:['domain'=>'tp5']
检测调用当前路由规则的域名是不是参数所指定的域名
①语法格式:['domain'=>'域名']
②支持子域名:['domain'=>'子域名']

5.更多参数,如绑定模块/合并额外参数等建议查阅手册

变量规则

正则表达式
描述字符串匹配模式,主要用于字符串的查找/替换与分割
①由:定界符、原子、元字符和修正符,四部分组成
②定界符:通常用#,~~,/等非原子或元字符反斜杠\都行;
③原子:需要匹配的字符,由可见与不可见字符组成
④元字符:限定或修饰原子部分,不能单独使用
⑤修正符:限定或修饰整个正则表达式

路由变量规则
用来对动态路由规则中的变量部分,进行校验的依据。
变量规则的使用域
①局部变量规则:仅对当前路由有效

Route::rule('路由规则','路由地址','请求类型',[路由参数],['变量规则']);

变量规则:['变量名1'=>'正则表达式1','变量名2'=>'正则表达式2']

②全局变量规则:已注册的全部路有规则都要遵守

1.单独创建:Route::pattern('变量名','正则表达式');
2.批量创建:Route::pattern(['变量名1'=>'正则表达式1','变量名2'=>'正则表达式2']);

路由分组(重要)

当多个路由规则中,有多个路由前缀时,分组可以提高效率。
分组方法:
1.动态方法:Route::group('分组名称'[路由地址,[路由参数],[变量规则]])
2.配置数组:return ['规则'=>[路由地址,[路由参数],[变量规则]]

根据路由参数分类:
1.闭包分组:

Route::group('',function(){
	//创建路由规则语句;
});

示例:

//用闭包实现
think\Route::group('demo',function(){
	think\Route::get(':id','index/user/demo1',[],['id'=>'\d{2,4}']);
	think\Route::get(':name','index/user/demo2',[],['name'=>'[a-zA-Z]+']);
	think\Route::get(':isOK','index/user/demo3',[],['isOK'=>'0|1']);
})

2.虚拟分组:根据相同的路由参数进行分组
示例:

think\Route::group(['name'=>'demo','method'=>'get','prefix'=>'index/user/'],[
	':id' => ['demo1',[],['id'=>'\d{2,4}']],
	':name'=>['demo2',[],['name'=>'[a-zA-Z]+']],
	':isOK'=>['demo3',[],['isOK'=>'0|1']]
]);

//代码改造优化
think\Route::group('demo',[
	':id' => 'demo1',
	':name'=>'demo2',
	':isOK'=>'demo3',
],[
	'method'=>'get',
	'prefix'=>'index/user/'
],[
	'id'=>'\d{2,4}',
	'name'=>'[a-zA-Z]+',
	'isOK'=>'0|1'
]);
别名路由

快速注册同一控制器下所有操作方法(不支持变量规则)

①动态方法:
Route::alias('规则名称','模块/控制器',[路由参数]);
示例:

think\Route::alias('math','index/demo',[
	'ext'=>'html',
	// 'allow'=>'add,sub',	//白名单:允许访问的方法
	'except'=>'add,sub',	//黑名单不允许访问的方法
]);

②静态数组:

return [
	'___alias___'=>['规则名称','模块/控制器',[路由参数]]
];

示例:

return [
	'__alias__'=>[
		'math'=>['index/demo',['ext'=>'html','except'=>'add,sub',]],
	],
];
路由绑定(重要)

1.入口绑定
在入口文件中添加:BIND_MODULE系统常量

//将当前访问绑定到模块/控制器
define('BIND_MODULE','index');	//模块级
define('BIND_MODULE','index/demo');	//控制器级

2.入口的自动绑定
入口文件名与应用中的模块自动绑定
①入口自动绑定模块设置:auto_bind_module=>true
②创建需要绑定的入口文件,例如:admin.php
③闯将与入口文件对应的模块与控制器:application/admin/controller/Index.php并创建默认index()方法
④直接访问:域名/admin.php,就会自动执行admin模块中默认控制器中的默认方法

3.动态绑定
Route::bind('模块[/控制器][/操作]')
①绑定当前的URL到模块:Route::bind('模块');
②绑定当前的URL到模块下面的控制器:Route::bind('模块/控制器')
③绑定当前的URL到模块下面的控制器中的指定操作:Route::bind('模块/控制器/操作');

4.绑定到命名空间或者类

①绑定到当前的URL到指定命名空间
Route::bind('app\index\controller','namespace');
所有采用该命名空间的类,都可以直接访问
②绑定当前的URL到类
Route::bind('app\index\controller\Demo','class')
所有Demo类中的方法,可以直接访问

注意:这种绑定形式会直接跳过模块配置文件和公共文件

更多推荐

ThinkPHP5.0教程学习04:TP5框架的URL路由规则与配置技巧

本文发布于:2023-06-14 03:12:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1431247.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:路由   框架   规则   技巧   教程

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!