解密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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
《PHP编程最快明白》第八讲:php启发和小结
Nov 01 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
PHP实现的策略模式示例
Mar 20 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 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
世界上第一台立体声收音机
2021/03/01 无线电
我的论坛源代码(八)
2006/10/09 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
JS实现购物车特效
2017/02/02 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
简单谈谈Python的pycurl模块
2018/04/07 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Python 实现微信防撤回功能
2019/04/29 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
新学期家长寄语
2014/01/19 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
2015年母亲节寄语
2015/03/23 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js