一、路由的模式

普通模式(默认pathinfo,不解析路由)

‘url_route_on’ => false

混合模式(pathinfo+解析路由)

‘url_route_on’ => true,
‘url_route_must’=> false,

强制模式(必须路由)

‘url_route_on’ => true,
‘url_route_must’ => true,

二、动态注册路由

1、动态注册路由

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

实例
return [
Route::rule('demo/:name/[:sex]', 'index/Index/demo', 'GET', ['ext' => 'html'], ['name' => '\w+', 'age' => '\w{1,2}']),
]

路由表达式:demo/:name/[:sex](”[]“为可选)
路由地址:/index/Index/demo
请求类型:get|post| 等
路由参数:[‘ext’=>‘html’](后缀检测)等等
变量规则:[‘sex’=>‘0|1’](只能为0和1)等等,正则表达式

//根路径下使用闭包
Route::get('/', function () {echo '我是demo3,临时维护,谢谢支持!';
}),//301重定向
//  Route::get('demo4', 'http://www.baidu.com'),
2、数组方式动态注册路由(简洁)
return [
//pattern全局变量
'__pattern__' => ['name' => '\w+',...
],'demo2' => 'admin/Index/demo2',
'demo3/:name/:age' => ['admin/Index/demo3', ['method' => 'get', 'ext' => 'asp'], ['age' => '\d+']],
'demo4/:name/:money' => ['admin/Index/demo4', ['method' => 'get', 'ext' => 'asp'], ['money' => '\d+']],
'demo5/:name' => ['admin/Index/demo5', ['method' => 'get', 'ext' => 'php'], []],
];

三、路由分组

个人:同一个路由定义(demo),根据URL传递参数的值的不同,而匹配不同的变量规则,从而进入不同的路由规则。例如以下

①逐条

'demo/:num' => ['admin/Index/demo1', ['method' => 'get'], ['num' => '\d{2,4}']],
'demo/:str' => ['admin/Index/demo2', ['method' => 'get'], ['str' => '[a-zA-Z]+']],
'demo/:bool' => ['admin/Index/demo3', ['method' => 'get'], ['bool' => '0|1']],

②合并

'[demo]' => [':num' => ['admin/Index/demo1', ['method' => 'get'], ['num' => '\d{2,4}']],':str' => ['admin/Index/demo2', ['method' => 'get'], ['str' => '[a-zA-Z]+']],':bool' => ['admin/Index/demo3', ['method' => 'get'], ['bool' => '0|1']],
],

③使用group分组注册

//Route::group(‘路由表达式’,‘对路由的定义’);
think\Route::group('demo', [':num' => ['admin/Index/demo1', ['method' => 'get'], ['num' => '\d{2,4}']],':str' => ['admin/Index/demo2', ['method' => 'get'], ['str' => '[a-zA-Z]+']],':bool' => ['admin/Index/demo3', ['method' => 'get'], ['bool' => '0|1']],
]);

④从③提取共同的部分——简化

think\Route::group('demo', [':num' => 'demo1',':str' => 'demo2',':bool' => 'demo3',
], ['method' => 'get', 'prefix' => 'admin/Index/'], ['num' => '\d{2,4}', 'str' => '[a-zA-Z]+', 'bool' => '0|1']);

⑤路由分组闭包嵌套

个人:和第④的路由功能基本一致,如果不是什么特别需求或者习惯使用闭包,就少用或不用吧

Route::group(['method'=>'get','ext'=>'html'],function(){Route::group('blog',function(){Route::any('blog/:id','blog/read',[],['id'=>'\d+']);Route::any('blog/:name','blog/read',[],['name'=>'\w+']);}
});

三、路由绑定

1、绑定到模块/控制器/操作(最多绑定到操作级)
// 绑定当前的URL到 index模块
Route::bind('index');
// 绑定当前的URL到 index模块的blog控制器
Route::bind('index/blog');
// 绑定当前的URL到 index模块的blog控制器的read操作
Route::bind('index/blog/read');

个人:到目前为止路由绑定的效果使用动态注册路由没差别,不过这里不需要定义路由表达式,即简单迅捷

http://serverName/index/blog/read/id/5

http://serverName/read/id/5

个人:但路由绑定+注册路由可以将 模块、控制器、方法、传递的参数名 全部隐藏,而只注册路由的话只能隐藏 模块、控制器、传递的参数名,还存在一个路由表达式

Route::get('index/blog/:id','index/blog/read');

http://serverName/5
2、绑定到命名空间

个人: 这一个绑定十分的省事,原先做项目时模型和控制器啥的都需要在最上面进行命名空间声明,而使用命名空间绑定,一个模块只需要两句,两个模块四句,岂不是超级全局变量?不过单从URL上来说只省略了模块这一层。

//绑定到命名空间
Route::bind('\app\index\controller','namespace');

只需

http://serverName/blog/read/id/5

就可以直接访问 \app\index\controller\Blog类的read方法。

3、绑定到类

个人:相比命名空间,这里单从URL来说省略了模块、控制器两层。类似命名空间,单这里针对的这是控制器层,而命名空间针对的是模块层

// 绑定到类
Route::bind('\app\index\controller\Blog','class');

只需

http://serverName/read/id/5

就可以直接访问 \app\index\controller\Blog类的read方法。

注:绑定到命名空间和类之后,不会进行模块的初始化工作。
4、入口文件绑定

个人:如果我们使用入口文件绑定,绑定一个模块,同时取消多模块访问配置↓,也就意味着,就算你在项目里放了再多项目也只会访问一个。想要访问其他模块只需要在入口文件改下名字即可。甚至可以使用一个空模块。将入口文件绑定为空模块将实现项目下线功能。

// 是否支持多模块
'app_multi_module' => true,

只需要入口文件添加BIND_MODULE常量,即可把当前入口文件绑定到指定的模块或者控制器,例如:

如果我们需要给某个入口文件绑定模块,可以使用下面两种方式:
①常量定义
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 绑定到index模块
define('BIND_MODULE','index');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
②自动入口绑定

个人:顾名思义,和①功能一样,只是这个连绑定都不需要。只需要打开↓配置即可

// 入口自动绑定模块
'auto_bind_module' => false,

四、域名路由

// blog子域名绑定到blog模块
Route::domain('blog','blog');
// blog子域名绑定到blog模块,并添加默认参数
Route::domain('blog','blog?var=thinkphp');

// 原来的URL访问
http://www.thinkphp.cn/blog/article/read/id/5
// 绑定到blog子域名访问
http://blog.thinkphp.cn/article/read/id/5

// blog子域名绑定到index模块的blog控制器
Route::domain('blog','index/blog');

// 原来的URL访问
http://www.thinkphp.cn/index/blog/read/id/5
// 绑定到blog子域名访问
http://blog.thinkphp.cn/read/id/5

// 完整域名绑定到admin模块
Route::domain('admin.thinkphp.cn','admin');
// IP绑定到admin模块
Route::domain('114.23.4.5','admin');

泛域名部署

二级泛域名
// 绑定泛二级域名域名到book模块
Route::domain('*','book?name=*');
并且可以直接通过$_GET['name']变量 获取当前的泛域名。下面的URL访问都会直接访问book模块
http://hello.thinkphp.cn
http://quickstart.thinkphp.cn
三级泛域名
// 绑定泛三级域名到user模块
Route::domain('*.user','user?name=*');如果我们访问如下URL地址:
http://hello.user.thinkphp.cn
的同时,除了会访问user模块之外,还会默认传入 $_GET['name'] = 'hello'

在配置传入参数的时候,如果需要使用当前的泛域名作为参数,可以直接设置为“*”即可

TP5手册:https://www.kancloud.cn/manual/thinkphp5/118029

TP5路由知识简单个人汇总相关推荐

  1. 透析CCNP路由知识五大技术4

    透析CCNP路由知识五大技术4 路由选择原理       1.1路由选择基础知识       路由是将对象从一个地方转达发到另一个地方的一个中继过程       学习和维持网络拓朴结构知识的机制被认为 ...

  2. Web前端知识技能大汇总

    Web前端知识技能大汇总 来源:github 发布时间:2015-07-08 阅读次数:3432 28 项目起源 还记得@jayli 的这幅前端知识结构图么. 图片的形式具有诸多的不便.缺失源图的我们 ...

  3. php的知识体系结构图,高中英语全部知识体系结构图汇总

    一.简单句的五个基本句型 1.主语+不及物动词 2.主语+及物动词+宾语 3.主语+系动词+主语补语 4.主语+双宾动词+间接宾语+直接宾语 5.主语+宾补动词+宾语+宾语补语 更多英语学习办法:ht ...

  4. 不同网段虚拟机,互相访问时的路由配置,附路由知识学习

    事情实例: 虚拟主机:192.168.90.247需要访问192.168.91.XX网段的数据库,无法访问. 1.这里要考虑一下添加一个路由,目的地址为192.168.91.XX,掩码为255.255 ...

  5. java简单题目_Java考点知识简单练习题

    Java考点知识简单练习题 Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网,同时拥有全球最大的开发者专业社群.下面是 ...

  6. HTML+CSS基础知识简单版

    HTML+CSS基础知识简单版 一.HTML概述 HTML:超文本标记语言,其实就是用来开发网页的一门语言: CSS:层叠样式表,可以用于渲染网页.美化网页.做网页. 1.HTML介绍 HTML:超文 ...

  7. PMP49个过程组知识领域ITTO汇总 -- 项目范围管理

    项目范围管理 PMP49个过程组知识领域ITTO汇总 – 项目整合管理 PMP49个过程组知识领域ITTO汇总 – 项目范围管理 PMP49个过程组知识领域ITTO汇总 – 项目进度管理 PMP49个 ...

  8. 静态路由知识华为eNSP实践

    静态路由知识&华为eNSP实践 静态路由: 路由加表: 查路由表: 静态路由实践 网络拓扑图 主机配置: AR1配置: 实验效果: 补充: 静态路由: 最优的加入表中 路由加表: 如果目的地网 ...

  9. 基于X86的MikroTik ROS软路由的简单介绍和应用(一)

    基于X86的MikroTik ROS软路由的简单介绍和应用 写在前面 其实基于X86开发的路由系统,很早就有一些企业开始做了,国内的比较出名的有海蜘蛛,维盟.爱快等等,但是今天介绍的呢,是国外的一个专 ...

  10. 计算机主板知识简单总结

    计算机主板知识简单总结 **摘要:**最近公司有个计算机零部件装配调试员的考试,读大学的时候没能认真学习<计算机组成及原理>.所以第一次裸考,果断挂了.亏还是个做IT的男人.所以,简单花了 ...

最新文章

  1. [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)
  2. Android为TV端助力 转载:android自定义view实战(温度控制表)!
  3. python计算在月球的体重_NumPy-快速处理数据--矩阵运算
  4. 适合上班族的两种兼职
  5. b丅151组成的充电器电路_宜家LIVBOJ 无线充电器拆解,这设计一目了然
  6. Car2go 的前端框架选择
  7. LANTENNA:通过以太网电缆泄露,从物理隔离网络中窃取数据
  8. 飞思卡尔芯片k66单片机溢出_PWM 初试溢出中断
  9. 下载微信视频号视频的憨批方法
  10. 互联网日报 | 5月22日 星期六 | 中国移动5G套餐用户破2亿;京东物流港股IPO认购结束;天猫宣布运费险降费...
  11. MWC18丨中兴通讯联合GSMA举办5G峰会 迎接万物智联世界
  12. 小米笔记本air 13.3 2018款参数
  13. 赶吃花的牛 USACO
  14. java 代码块(静态代码块、局部代码块、构造代码块)
  15. mtk preloader
  16. 分享一个好用的在线加解密工具
  17. 魔兽世界服务器是怎么维护的,魔兽世界服务器维护时 玩家可做的七件事
  18. 网狐棋牌为服务器大厅加载游戏注意事项
  19. 基于X86的MikroTik ROS软路由的简单介绍和应用(一)
  20. Input Axis Mouse X is not setup.

热门文章

  1. 136_原始套接字_链路层MAC包_模仿他人飞秋,给自己主机上的飞秋【发送UDP数据】【只需要修改包含用户名、头像信息的数组】
  2. IKM-Java SE 8评估测试题挑战,测测你的基础水平
  3. XenCenter创建虚拟机
  4. linux内核源码下载地址
  5. 北斗导航 | 基于改进RANSAC算法的BDS接收机自主完好性监测算法研究
  6. (软考信息安全工程师--中级)二、网络攻击原理与常用方法
  7. 项目管理概论网课作业(用于复习)
  8. XLSTransformer 导出
  9. uiso9|uiso9_cn.exe
  10. Oracle9iClient简化版的安装与tnsnames配置,sqlplus的连接