thinkphp中模块和操作映射
2016-09-19 10:51
239 查看
模板和操作映射功能是3.1.2版本支持的对模块和操作设置的映射机制,由于可以通过改变配置动态改变(实际真正改变,并非别名)URL访问地址,加强了应用的安全性,而且,映射机制具有URL不区分大小写访问的特性,对于应用的迁移也有很大的帮助。
因为,普通情况下,如果需要更改URL的模块或者操作访问的话,需要改动的文件较多,容易导致关联性出错。尤其是很多应用需要迁移到新版本的时候,由于模型和控制器改动较多,导致URL地址出现大的调整,通过模块和操作映射功能,可以很轻松的解决此类问题。
'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名称。
'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地址中的操作名。
操作映射和模块映射可以同时定义,没有影响,例如:
则,原来的注册地址
http://serverName/index.php/Member/add
变成了
http://serverName/index.php/user/register888
例如,原来在模板文件中使用了
<a href="{:U('Member/add')}">用户注册</a>
无论如何定义Member模块和add操作的映射,U方法的写法始终保持不变,仍然会正确的指向映射后的URL地址。
1、有经常变化URL需要的场合
2、对URL安全性较高的场合
3、需要移植的应用不希望改变URL地址的场合
需要注意的事项:
在使用了模块和操作映射后,对相关URL地址的路由定义可能需要调整。
因为,普通情况下,如果需要更改URL的模块或者操作访问的话,需要改动的文件较多,容易导致关联性出错。尤其是很多应用需要迁移到新版本的时候,由于模型和控制器改动较多,导致URL地址出现大的调整,通过模块和操作映射功能,可以很轻松的解决此类问题。
模块映射
要定义模块映射,我们只需要在配置文件中定义:'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名称。
操作映射
不仅是模块名称可以映射,操作名称也支持映射,而且是针对模块来设置的,操作映射的定义方式为:'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地址中的操作名。
操作映射和模块映射可以同时定义,没有影响,例如:
则,原来的注册地址
http://serverName/index.php/Member/add
变成了
http://serverName/index.php/user/register888
U函数自动支持
可能很多人会担心,在设置了模块和操作映射后,U函数就会出现需要随之改动的情况。其实不需要担心,因为U函数内部已经自动支持了模块和操作映射的情况。例如,原来在模板文件中使用了
<a href="{:U('Member/add')}">用户注册</a>
无论如何定义Member模块和add操作的映射,U方法的写法始终保持不变,仍然会正确的指向映射后的URL地址。
总结
模块和操作映射可以用于如下场合:1、有经常变化URL需要的场合
2、对URL安全性较高的场合
3、需要移植的应用不希望改变URL地址的场合
需要注意的事项:
在使用了模块和操作映射后,对相关URL地址的路由定义可能需要调整。
相关文章推荐
- 解密ThinkPHP3.1.2版本之模块和操作映射
- 解密ThinkPHP3.1.2版本之模块和操作映射
- ThinkPHP的模块和操作分析
- ThinkPHP框架中的空模块与空操作的实例
- thinkphp3.1.2控制器的模块和操作
- ThinkPHP采用模块和操作
- Thinkphp空操作,空模块
- ThinkPHP读取配置动态配置空操作空控制器分模块
- thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)
- Thinkphp dispatch派遣类分离出模块和操作
- Thinkphp 3.1.3中display方法调用其他模块的操作模板的bug
- ThinkPHP 3.1.2 控制器的模块和操作
- 模块和操作映射
- 【thinkPHP3.1.2】空模块写法,空操作写法
- ThinkPHP 3.1.2 控制器的模块和操作
- ThinkPHP 3.1.2 控制器的模块和操作
- ThinkPHP5.1 @[模块/控制器/]操作
- thinkPHP 空模块和空操作、前置操作和后置操作 详细介绍(十四)
- ThinkPHP - 空模块+空操作
- Thinkphp 3.0 空模块 与空操功能一样,只不过是无法访问的模块而进行的操作