解密ThinkPHP3.1.2版本之模塊和操作映射
模板和操作映射功能是ThinkPHP3.1.2版本支持的對模塊和操作設(shè)置的映射機(jī)制,由于可以通過改變配置動態(tài)改變(實(shí)際真正改變,并非別名)URL訪問地址,加強(qiáng)了應(yīng)用的安全性,而且,映射機(jī)制具有URL不區(qū)分大小寫訪問的特性,對于應(yīng)用的遷移也有很大的幫助。
因?yàn)?,普通情況下,如果需要更改URL的模塊或者操作訪問的話,需要改動的文件較多,容易導(dǎo)致關(guān)聯(lián)性出錯(cuò)。尤其是很多應(yīng)用需要遷移到新版本的時(shí)候,由于模型和控制器改動較多,導(dǎo)致URL地址出現(xiàn)大的調(diào)整,通過模塊和操作映射功能,就可以很輕松的解決此類問題。
1.模塊映射
要定義模塊映射,我們只需要在配置文件中定義:
'URL_MODULE_MAP'=>array( 'user' => 'Member', 'blog' => 'Info', )
URL_MODULE_MAP是一個(gè)數(shù)組,每個(gè)數(shù)組項(xiàng)表示:
'模塊映射名'=>'實(shí)際模塊名'
映射名稱不區(qū)分大小寫,所以設(shè)置后,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的區(qū)別之一。沒有定義映射的模塊訪問不變。
定義了模塊映射后,可以通過MODULE_ALIAS常量讀取當(dāng)前模塊的URL名稱。
2.操作映射
不僅是模塊名稱可以映射,操作名稱也支持映射,而且是針對模塊來設(shè)置的,操作映射的定義方式為:
'URL_ACTION_MAP'=>array( 'Member' => array( 'register' => 'add', ), 'Info' => array( 'list' => 'index' ), )
URL_ACTION_MAP參數(shù)是一個(gè)二維數(shù)組,每個(gè)數(shù)組項(xiàng)表示:
'實(shí)際模塊名'=>array( '操作映射名1'=>'實(shí)際操作名1' '操作映射名2'=>'實(shí)際操作名2' ...... )
操作映射名不區(qū)分大小寫,如上定義后,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常量讀取當(dāng)前操作在URL地址中的操作名。
操作映射和模塊映射可以同時(shí)定義,沒有影響,例如:
'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函數(shù)自動支持
可能很多人會擔(dān)心,在設(shè)置了模塊和操作映射后,U函數(shù)就會出現(xiàn)需要隨之改動的情況。其實(shí)不需要擔(dān)心,因?yàn)閁函數(shù)內(nèi)部已經(jīng)自動支持了模塊和操作映射的情況。
例如,原來在模板文件中使用了
<a href="{:U('Member/add')}">用戶注冊</a>
無論如何定義Member模塊和add操作的映射,U方法的寫法始終保持不變,仍然會正確的指向映射后的URL地址。
總結(jié):
模塊和操作映射可以用于如下場合:
1、有經(jīng)常變化URL需要的場合
2、對URL安全性較高的場合
3、需要移植的應(yīng)用不希望改變URL地址的場合
需要注意的事項(xiàng):
在使用了模塊和操作映射后,對相關(guān)URL地址的路由定義可能需要調(diào)整。
- 詳解PHP的Laravel框架中Eloquent對象關(guān)系映射使用
- ThinkPHP中公共函數(shù)路徑和配置項(xiàng)路徑的映射分析
- 回答PHPCHINA上的幾個(gè)問題:URL映射
- PHP實(shí)現(xiàn)路由映射到指定控制器
- 淺析php設(shè)計(jì)模式之?dāng)?shù)據(jù)對象映射模式
- PHP面向?qū)ο笾I(lǐng)域模型+數(shù)據(jù)映射器實(shí)例(分析)
- 老生常談PHP面向?qū)ο笾畼?biāo)識映射
- PHP實(shí)現(xiàn)的數(shù)據(jù)對象映射模式詳解
- PHP數(shù)據(jù)對象映射模式實(shí)例分析
- php實(shí)現(xiàn)映射操作實(shí)例詳解
相關(guān)文章
PHP讀取mssql json數(shù)據(jù)中文亂碼的解決辦法
PHP及網(wǎng)頁使用UTF-8編碼,數(shù)據(jù)庫是sql server2008,使用默認(rèn)編碼,當(dāng)讀取數(shù)據(jù)庫數(shù)據(jù)時(shí),使用php自帶的json_encode()返回到前端,結(jié)果中文不顯示。下面腳本之家小編給大家介紹PHP讀取mssql json數(shù)據(jù)中文亂碼的解決辦法,需要的朋友一起學(xué)習(xí)2016-04-04Yii實(shí)現(xiàn)的多級聯(lián)動下拉菜單
這篇文章主要介紹了Yii實(shí)現(xiàn)的多級聯(lián)動下拉菜單,包括視圖、模型及控制器的相關(guān)實(shí)現(xiàn)代碼,涉及基于Yii的數(shù)據(jù)庫查詢、數(shù)組遍歷與數(shù)據(jù)顯示等相關(guān)操作技巧,需要的朋友可以參考下2016-07-07PHP中幾個(gè)可以提高運(yùn)行效率的代碼寫法、技巧分享
這篇文章主要介紹了PHP中幾個(gè)可以提高運(yùn)行效率的代碼寫法、技巧分享,本文分享的5個(gè)方法都是在細(xì)微之處有所不同,一定要認(rèn)真仔細(xì)的去看代碼哦,需要的朋友可以參考下2014-08-08詳解laravel passport OAuth2.0的4種模式
這篇文章主要介紹了laravel passport OAuth2.0的4種模式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11PHP 數(shù)組遍歷foreach語法結(jié)構(gòu)及實(shí)例
下面小編就為大家?guī)硪黄狿HP 數(shù)組遍歷foreach語法結(jié)構(gòu)及實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06Laravel-添加后臺模板AdminLte的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Laravel-添加后臺模板AdminLte的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10