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安全配置
Oct 09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
深入php list()函数的详解
Jun 05 PHP
php使用codebase生成随机数
Mar 25 PHP
php中session与cookie的比较
Jan 27 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP的微信支付接口使用方法讲解
Mar 08 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
一个查看session内容的函数
2006/10/09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP操作xml代码
2010/06/17 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
pandas ix &iloc &loc的区别
2019/01/10 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
趣味体育活动方案
2014/02/08 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
贪污检举信范文
2015/03/02 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
Redis集群的关闭与重启操作
2021/07/07 Redis