解密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之第六天
Oct 09 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
PHP抽象类 介绍
Jun 13 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
php的sso单点登录实现方法
Jan 08 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
php和html的区别点详细总结
Sep 24 PHP
Laravel的加密解密与哈希实例讲解
Mar 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php 无限极分类
2008/03/27 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
python中List的sort方法指南
2014/09/01 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
大学系主任推荐信范文
2013/12/24 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP