ThinkPHP5路由

路由作用

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

例如:http://tp5.com/edu/test/demo1http://tp5.com/demo1

路由模式

开启路由后,其实只有二中状态,要么全部URL请求都采用路由访问,要么是有路由规则的用路由访问,没有的还是按照PATH_INFO规则访问。

1.普通模式

配置:'url_route_on=>false

访问:全部采用PATH_INFO格式

2.混合模式

配置:'url_route_on'=>true,'url_route_must'=>false,

已注册用路由访问,为注册仍用PATH_INFO访问

3.强制模式

配置:'url_route_on'=>true,'url_rote_must'=>false,

全部访问必须采用路由模式,包括首页'/'

路由注册

1.动态方法:

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

2.配置数组(配置文件方式):

return [

'路由规则'=>'路由地址',

'路由规则'=>['路由地址',[路由参数],[变量规则]]

];

路由规则

路由规则就是用户最终用来访问的URL地址,并非原始URL地址;

路由标识符/:变量名1/:变量名2/:[:可选变量名]

路由地址

路由地址,是用户最终要访问的URL,也是路由规则的目标,它不像路由规则,可以通过路由参数和变量规则进行检验,所以用户一定要确保路由地址的有效性。

1.路由地址

路由地址,就是用户用路由规则访问页面时,真实跳转到的地址;

2.路由地址的种类

1)路由到:模块/控制器/操作;

基本语法:Route::rule('路由规则','模块/控制器/操作');

重点理解:

可访问控制器:'url_controller_layer'=>'controller',

按从右到左的顺序进行地址解析:操作->控制器->模块,

支持额外参数(查询方式):?变量名1=值1&变量名2=值2..

2)路由到:操作方法;

基本语法:Route::rule('路由规则','@模块/控制器/操作');

重点理解:

跳过模块初始化,直接执行控制器中的方法;

模块初始化:配置文件和公共文件;

调用试图时必须设置完整模版文件的路径。

3)路由到:类的方法(动态与静态)

基本语法:

Route::rule('路由规则','\完整命名空间\类名@动态操作');

Route::rule('路由规则','\完整命名空间\类名::静态操作');

重点理解:

类必须创建在应用目录或子目录中;

静态方法支持外部动态访问,但建议在语法上分开;

为了项目规范,除非不得已,否者尽可能少用。

4)路由到:重定向地址(301)

基本语法:Route::rule('路由规则','重定向地址');

重点理解:

重定向地址:'/'或者'http://'开头的外部地址;

'/':是以当前可访问的Web目录开始:如'public';

外部地址是301跳转,适用与网站迁移。

5)路由到:闭包函数

基本语法:

Route::rule('路由规则',function([参数]){

//闭包函数

});

重点理解:

闭包即使函数中的函数,或方法中的方法;

闭包函数可以接受通过路由规则传过来的参数;

不再执行任何操作,相当于把方法直接定义在参数中。

路由参数

路由参数是用来检测路由地址的,准确的讲,是用来校验除了路由变量之外额所有内容。

1.路由参数

路由参数是用来验证当前的路由规则是否有效的重要依据;

2.路由参数的种类

1)请求类型:['method'=>'get|post'];

请求类型:最常用的是GET和POST,其它了解即可(如delete,put等);

使用方法:

如注册方法已生命类型则无设置:Route::get()/post();

Route::rule()/any():['method'=>'get|post'];

使用路由配置文件数组定义:['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'=>'tp5.com'];

说明:回调函数返回true则路由规则有效,否者无效;

使用方法:

回调函数写在应用公共方法中:common.php;

语法:['callback'=>'回调函数名称'];

例如:用回调函数检测是否存在某个应用配置项,来决定是否执行路由规则。

4)域名检测:['domain'=>'tp5.com'];

说明:检测调用当前路由规则的域名是不是参数所指定的域名;

使用方法:

语法格式:['domain'=>'域名'];

支持子域名:['domain'=>'域名'];

5)更多参数,如绑定模块/合并额外参数等请查阅手册。

变量规则

1.路由变量规则:

用来对动态路由规则中的变量部分,进行校验的依据。

2.变量规则的使用域:

1 )局部变量规则:仅对当前路由有效

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

变脸规则:['动态变量1'=>'正则表达式1','动态变量2'=>'正则表达式2'];

例如:Route::rule('demo','index/demo','GET',[],['id'=>'\d{4}']);

2)全局变量规则:已注册的全部路由规则都要遵守

单独创建:Route::pattern('变量名','正则表达式');

批量创建:

Route::pattern([

'变量名1'=>'正则表达式1',

'变量名2'=>'正则表达式2',

]);

路由变量规则和路由规则可以写在一起,以数组的形式。

3..正则表达式

描述字符串匹配模式,主要用于字符串的查找/替换与分割;

4.正则表达式有几部分组成

四部分组成:定界符,院子,元字符和修正符。

定界符:通常用#,~~,/等非原子或元字符反斜杠\都行。

原子:需要匹配的字符,由可见与不可见字符组成;

元字符:限定或修饰原子部分,不能单独使用;

修正符:限定或修饰整个正则表达式。

变量的规则是路由中的一个重点,也是保证路由规则安全的重要手段,当全局与局部的变量规则作用在同一个路由变量上面时,局部规则覆盖全局规则,即局部的优先级高于全局。

路由分组

路由分组,看上去很直观,其实很抽象,它的高效云信,依赖于项目前期的科学规划。

1.什么情况下,适合进行路由分组?

当多个路由规则中,由相同的路由前缀时,分组可以可以提高效率。

2.分组方法

动态方法:Route::group('分组名称',[路由地址,[路由参数],[变量规则]]);

配置数组:return['规则'=>[路由地址,[路由参数],[变量规则]];

1)路由参数分类

闭包分组:

Route::group('',function(){

//创建路由规则语句

})

虚拟分组:根据相同路由参数进行分组

别名路由

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

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

静态数组:

return[

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

];

别名路由,可以进一步简化路由规则,但是不支持变量规则,仅仅是缩短URL地址,使用请求地址更坏短小优雅。借助路由参数中的allow和except参数实现黑白名单功能,比较有实际意义。

路由绑定

1.入口绑定

在入口文件中更添加:BIND_MODULE系统常量

//将当前访问绑定模块/控制器

define('BIND_MODULE','index');//模块级

define('BIND_MODULE','index/demo');//控制器级

2.入口自动绑定

入口文件名与应用中的模块自动绑定

1)入口自动绑定模块设置:'auto_bind_module'=>true,

2)创建需要绑定的入口文件:列如:admin.php

3)创建与入口文件对应的模块与控制器:application/admin/controller/Index.php,并创建默认index()方法

4)直接访问:域名/admin.php,就会自动执行admin模块中默认控制器中的默认方法

3.动态绑定

语法:Route::bind('模块[/控制器][/操作]');

1)绑定当前的URL到模块

Route::bind('模块]');

2)绑定当前的URL到模块下面的控制器

Route::bind('模块/控制器');

3)绑定当前的URL到模块下面的控制器中的指定操作

Route::bind('模块/控制器/操作');

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

1)绑定当前的URL到指定命名空间

Route::bind('app\index\controller','')

2)绑定当前的URL到类

ThinkPHP5路由(原文地址

结束。


你们的支持也是我前进的动力,非常感谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容