解密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 相关文章推荐
PHP中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
php 计划任务 检测用户连接状态
Mar 29 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
Nov 22 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
PHP将身份证正反面两张照片合成一张图片的代码
Apr 08 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 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安装攻略:常见问题解答(二)
2006/10/09 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
php加密解密字符串示例
2016/10/13 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
js实现全选和全不选
2020/07/28 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
python自动发送邮件脚本
2018/06/20 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
幼师专业求职推荐信
2013/11/08 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
大学校园活动策划书
2014/02/04 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
公司投资建议书
2014/05/16 职场文书
创文明城市标语
2014/06/16 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
党小组鉴定意见
2015/06/02 职场文书