模板和操作映射功能是ThinkPHP3.1.2版本支持的對模塊和操作設置的映射機制,由于可以通過改變配置動態改變(實際真正改變,并非別名)URL訪問地址,加強了應用的安全性,而且,映射機制具有URL不區分大小寫訪問的特性,對于應用的遷移也有很大的幫助。
因為,普通情況下,如果需要更改URL的模塊或者操作訪問的話,需要改動的文件較多,容易導致關聯性出錯。尤其是很多應用需要遷移到新版本的時候,由于模型和控制器改動較多,導致URL地址出現大的調整,通過模塊和操作映射功能,就可以很輕松的解決此類問題。
1.模塊映射
要定義模塊映射,我們只需要在配置文件中定義:
1
2
3
4
|
'URL_MODULE_MAP' => array ( 'user' => 'Member' , 'blog' => 'Info' , ) |
URL_MODULE_MAP是一個數組,每個數組項表示:
1
|
'模塊映射名' => '實際模塊名' |
映射名稱不區分大小寫,所以設置后,URL訪問從原來的:
1
2
|
http://serverName/index.php/Member/index http://serverName/index.php/Info/index |
變成了:
1
2
|
http://serverName/index.php/user/index http://serverName/index.php/blog/index |
并且原來的訪問URL是失效的,這也是和定義路由方式改變URL的區別之一。沒有定義映射的模塊訪問不變。
定義了模塊映射后,可以通過MODULE_ALIAS常量讀取當前模塊的URL名稱。
2.操作映射
不僅是模塊名稱可以映射,操作名稱也支持映射,而且是針對模塊來設置的,操作映射的定義方式為:
1
2
3
4
5
6
7
8
|
'URL_ACTION_MAP' => array ( 'Member' => array ( 'register' => 'add' , ), 'Info' => array ( 'list' => 'index' ), ) |
URL_ACTION_MAP參數是一個二維數組,每個數組項表示:
1
2
3
4
5
|
'實際模塊名' => array ( '操作映射名1' => '實際操作名1' '操作映射名2' => '實際操作名2' ...... ) |
操作映射名不區分大小寫,如上定義后,URL訪問從
1
2
|
http://serverName/index.php/Member/add http://serverName/index.php/Info/index |
變成了(不考慮前面定義的模塊映射):
1
2
|
http://serverName/index.php/Member/register http://serverName/index.php/Info/list |
同樣,原來的URL地址訪問則失效。沒有定義映射的操作訪問地址不變。
定義了操作映射后,可以通過ACTION_ALIAS常量讀取當前操作在URL地址中的操作名。
操作映射和模塊映射可以同時定義,沒有影響,例如:
1
2
3
4
5
6
7
8
|
'URL_MODULE_MAP' => array ( 'user' => 'Member' , ), 'URL_ACTION_MAP' => array ( 'Member' => array ( 'register888' => 'add' , ), ) |
則,原來的注冊地址
1
|
http://serverName/index.php/Member/add |
變成了
1
|
http://serverName/index.php/user/register888 |
3.U函數自動支持
可能很多人會擔心,在設置了模塊和操作映射后,U函數就會出現需要隨之改動的情況。其實不需要擔心,因為U函數內部已經自動支持了模塊和操作映射的情況。
例如,原來在模板文件中使用了
1
|
< a href = "{:U('Member/add')}" >用戶注冊</ a > |
無論如何定義Member模塊和add操作的映射,U方法的寫法始終保持不變,仍然會正確的指向映射后的URL地址。
總結:
模塊和操作映射可以用于如下場合:
1、有經常變化URL需要的場合
2、對URL安全性較高的場合
3、需要移植的應用不希望改變URL地址的場合
需要注意的事項:
在使用了模塊和操作映射后,對相關URL地址的路由定義可能需要調整。