解密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 相关文章推荐
在IIS上安装PHP4.0正式版
Oct 09 PHP
常用的php对象类型判断
Aug 27 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
php简单防盗链实现方法
Jul 29 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
php DES加密算法实例分析
Sep 18 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 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中将数组转成XML格式的实现代码
2011/08/08 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
php实现Session存储到Redis
2015/11/11 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
Cookie 小记
2010/04/01 Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
axios基本入门用法教程
2017/03/25 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
详解python statistics模块及函数用法
2019/10/27 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
keras导入weights方式
2020/06/12 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
2015年简历自我评价范文
2015/03/11 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
行政处罚事先告知书
2015/07/01 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
关于Python中进度条的六个实用技巧分享
2022/04/05 Python