解密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 相关文章推荐
PHP5 安装方法
Oct 09 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP多文件上传实例
Jul 09 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
CI框架表单验证实例详解
Nov 21 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
PHP精确计算功能示例
Nov 29 PHP
常用PHP封装分页工具类
Jan 14 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
PHP读取Excel类文件
May 15 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 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
mayfish 数据入库验证代码
2010/04/30 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
JS判定是否原生方法
2013/07/22 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
13个PHP函数超实用
2015/10/21 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
python创建学生管理系统
2019/11/22 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
12月小学生校园广播稿
2014/02/04 职场文书
大学学风建设方案
2014/05/04 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
2014年平安夜寄语
2014/12/08 职场文书
大学生学期个人总结
2015/02/12 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
亮剑观后感500字
2015/06/05 职场文书
工作服管理制度范本
2015/08/06 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS