解密ThinkPHP3.1.2版本之模块和操作映射


Posted in PHP onJune 19, 2014

模板和操作映射功能是ThinkPHP3.1.2版本支持的对模块和操作设置的映射机制,由于可以通过改变配置动态改变(实际真正改变,并非别名)URL访问地址,加强了应用的安全性,而且,映射机制具有URL不区分大小写访问的特性,对于应用的迁移也有很大的帮助。

因为,普通情况下,如果需要更改URL的模块或者操作访问的话,需要改动的文件较多,容易导致关联性出错。尤其是很多应用需要迁移到新版本的时候,由于模型和控制器改动较多,导致URL地址出现大的调整,通过模块和操作映射功能,就可以很轻松的解决此类问题。

1.模块映射

要定义模块映射,我们只需要在配置文件中定义:

'URL_MODULE_MAP'=>array(
  'user'   => 'Member',
  'blog'   => 'Info',
 )

URL_MODULE_MAP是一个数组,每个数组项表示:

'模块映射名'=>'实际模块名'

映射名称不区分大小写,所以设置后,URL访问从原来的:

http://serverName/index.php/Member/index
http://serverName/index.php/Info/index

变成了:

http://serverName/index.php/user/index
http://serverName/index.php/blog/index

并且原来的访问URL是失效的,这也是和定义路由方式改变URL的区别之一。没有定义映射的模块访问不变。
定义了模块映射后,可以通过MODULE_ALIAS常量读取当前模块的URL名称。

2.操作映射

不仅是模块名称可以映射,操作名称也支持映射,而且是针对模块来设置的,操作映射的定义方式为:

'URL_ACTION_MAP'=>array(
  'Member'  => array(
    'register' => 'add',
    ),
  'Info'   => array(
    'list'   => 'index'
    ),
 )

URL_ACTION_MAP参数是一个二维数组,每个数组项表示:

'实际模块名'=>array(
  '操作映射名1'=>'实际操作名1'
  '操作映射名2'=>'实际操作名2'
  ......
 )

操作映射名不区分大小写,如上定义后,URL访问从

http://serverName/index.php/Member/add
http://serverName/index.php/Info/index

变成了(不考虑前面定义的模块映射):

http://serverName/index.php/Member/register
http://serverName/index.php/Info/list

同样,原来的URL地址访问则失效。没有定义映射的操作访问地址不变。
定义了操作映射后,可以通过ACTION_ALIAS常量读取当前操作在URL地址中的操作名。
操作映射和模块映射可以同时定义,没有影响,例如:

'URL_MODULE_MAP'=>array(
  'user'   => 'Member',
 ),
 'URL_ACTION_MAP'=>array(
  'Member'  => array(
    'register888' => 'add',
    ),
 )

则,原来的注册地址

http://serverName/index.php/Member/add

变成了

http://serverName/index.php/user/register888

3.U函数自动支持

可能很多人会担心,在设置了模块和操作映射后,U函数就会出现需要随之改动的情况。其实不需要担心,因为U函数内部已经自动支持了模块和操作映射的情况。
例如,原来在模板文件中使用了

<a href="{:U('Member/add')}">用户注册</a>

无论如何定义Member模块和add操作的映射,U方法的写法始终保持不变,仍然会正确的指向映射后的URL地址。

总结:

模块和操作映射可以用于如下场合:

1、有经常变化URL需要的场合
2、对URL安全性较高的场合
3、需要移植的应用不希望改变URL地址的场合

需要注意的事项:

在使用了模块和操作映射后,对相关URL地址的路由定义可能需要调整

PHP 相关文章推荐
为查询结果建立向后/向前按钮
Oct 09 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php实现cookie加密的方法
Mar 10 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 #PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 #PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 #PHP
php数组合并array_merge()函数使用注意事项
Jun 19 #PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 #PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 #PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 #PHP
You might like
使用php+xslt在windows平台上
2006/10/09 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
js判断是否是手机页面
2017/03/17 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
Vue组件选项props实例详解
2017/08/18 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
教你安装python Django(图文)
2013/11/04 Python
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
python实现类之间的方法互相调用
2018/04/29 Python
python try except 捕获所有异常的实例
2018/10/18 Python
在Python中增加和插入元素的示例
2018/11/01 Python
在python里面运用多继承方法详解
2019/07/01 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
How TDD works
2012/09/30 面试题
售后主管岗位职责
2013/12/08 职场文书
抽样调查项目计划书
2014/04/24 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
2014年防汛工作总结
2014/12/08 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
法制工作总结2015
2015/07/23 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
python实现双向链表原理
2022/05/25 Python