thinkphp5框架路由原理与用法详解


Posted in PHP onFebruary 11, 2020

本文实例讲述了thinkphp5框架路由原理与用法。分享给大家供大家参考,具体如下:

路由理解

 

概括的说:路由就是网络请求的url与thinkphp应用层的逻辑处理地址的对应关系。
通俗的说:路由就是把url的请求优雅的对应到你想要执行的操作方法。

路由其实就是把真实的url地址隐藏起来,使用访问地址来访问应用(网站或OA等)。

通常这样定义:“访问地址”=》“真实地址”,这代表了一种映射关系。就好比用“1”代表去肯德基吃饭,用“0”代表去麦当劳吃饭,你预先告知过同事这个规则的话,只需要发送“1”或“0”给同事,同事就能理解要去哪里吃饭,一个道理。

路由的规则是thinkphp规定好的,比如TP的访问规则是:根目录/模块/控制器/方法,那么我们只需要定义一下映射关系“reg”=》“index/user/reg”,此时只需要再浏览器输入“域名/reg”就能访问“index模块/user/控制器/reg方法”这个地址了。

这样的优点:

1、没有处理过的url路径都是由 ...模块/控制器/方法/参数 构成,如果不加以“掩饰”的话,会被别人看清内部结构,不够安全。
2、可以让url地址更加简洁、优雅、美观。

定义

 

通常是在应用的路由配置文件application/route.php进行注册。
thinkphp5框架路由原理与用法详解

注册

 

  • 2种注册方式:1路由动态注册和2配置定义的方式
    thinkphp5框架路由原理与用法详解
  • 配置定义的方式
    其中,__pattern__是指定义全局变量规则,
    thinkphp5框架路由原理与用法详解
    对应Route.php中:
    thinkphp5框架路由原理与用法详解
    路由分组
    这个功能允许把相同前缀的路由定义合并分组,
    示例一:
    thinkphp5框架路由原理与用法详解

admin/Admin/test方法:

public function test(){
  echo 'i am test ';
  print_r(input());
}

示例如下(注意接收的参数):
thinkphp5框架路由原理与用法详解
thinkphp5框架路由原理与用法详解
示例二:
关于定义路由后,url的生成:url()方法里,url('index/blog/read','id=5&name=thinkphp');模块、控制器要写全,不然会出错。例如:

Route::group('show', [
 'page/:id' => ['index/Page/show'],
 'cate/:id' => ['index/Cate/show'],
], ['method' => 'get'], ['id' => '\d+']);

Href生成=》http://cms.com/index/page/show/id/65.html

动态注册:

Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
或者简化方法:
Route:: get(路由规则, 路由地址, 路由参数, 变量规则)

批量注册:

Route::rule([
'路由规则1'=>'路由地址和参数',
'路由规则2'=>['路由地址和参数','路由参数(数组)','变量规则(数组)']
...
],'','请求类型','匹配参数(数组)','变量规则');

注意:

  • 混合模式下,注册路由后,原来的访问地址会自动失效~

  • 每个参数中以“:”开头的参数都表示动态变量,并且会自动绑定到操作方法的对应参数。

  • 注册多个路由规则后,系统会依次遍历注册过的满足请求类型的路由规则,一旦匹配到正确的路由规则后则开始调用控制器的操作方法,后续规则就不再检测。

路由绑定
入口文件绑定模块后,再定义路由规则,就不需要加模块名称了。

// [ 应用入口文件 ]
//绑定admin模块
define('BIND_MODULE', 'admin');
// 给登录url定义路由
Route::rule('login', 'Login/index');

注意: define(‘BIND_MODULE', ‘index/index');绑定到控制器时,控制器名称index要小写,大写会post不成功。。。
关于路由到动态的模块、控制器或者操作

'show/:action/:id' => ['index/:action/show', 
['method' => 'get'],
['id' => '\d+', 'action' => '\w+']],

这两个都能访问成功?why?

http://cms.com/show/page/69
http://cms.com/index/page/show/id/69.html

明白一点了,不能这样写,可选参数只能放到路由规则的最后,如果在中间使用了可选参数的话,后面的变量都会变成可选参数。
路由别名
似乎使用路由别名后,原pathinfo并不会失效~

小结

  • url()助手函数里,模块/控制器/方法要写全;

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
May 24 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
php模板原理讲解
Nov 13 PHP
PHP实现的下载远程文件类定义与用法示例
Jul 05 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
基于php编程规范(详解)
Aug 17 PHP
php微信公众号开发之答题连闯三关
Oct 20 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 PHP
php数组指针函数功能及用法示例
Feb 11 #PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 #PHP
php-7.3.6 编译安装过程
Feb 11 #PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 #PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 #PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 #PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 #PHP
You might like
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
php ImageMagick windows下安装教程
2015/01/26 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
制衣厂各岗位职责
2013/12/02 职场文书
社团文化节策划书
2014/02/01 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
药店采购员岗位职责
2014/09/30 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python