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 相关文章推荐
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
Phpbean路由转发的php代码
Jan 10 PHP
Cakephp 执行主要流程
Mar 24 PHP
php错误、异常处理机制(补充)
May 07 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
php保存信息到当前Session的方法
Mar 16 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 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
做一个有下拉功能的留言版
2006/10/09 PHP
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
react build 后打包发布总结
2018/08/24 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
python GUI实例学习
2017/11/21 Python
python绘制直线的方法
2018/06/30 Python
想学python 这5本书籍你必看!
2018/12/11 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
小学后勤管理制度
2014/01/14 职场文书
承诺书格式
2014/06/03 职场文书
总结Python使用过程中的bug
2021/06/18 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
python+opencv实现目标跟踪过程
2022/06/21 Python