首頁 後端開發 php教程 解密ThinkPHP3.1.2版本之模块和操作映射_PHP

解密ThinkPHP3.1.2版本之模块和操作映射_PHP

Jun 01, 2016 am 11:51 AM
模組

ThinkPHP

模板和操作映射功能是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地址的路由定义可能需要调整。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

WLAN擴充模組已停止[修復] WLAN擴充模組已停止[修復] Feb 19, 2024 pm 02:18 PM

如果您的Windows電腦上的WLAN擴充模組出現問題,可能會導致您與網際網路中斷連線。這種情況常常讓人感到困擾,但幸運的是,本文提供了一些簡單的建議,可以幫助您解決這個問題,讓您的無線連線重新正常運作。修復WLAN擴充模組已停止如果您的Windows電腦上的WLAN可擴充性模組已停止運作,請依照下列建議進行修復:執行網路和Internet故障排除程式停用並重新啟用無線網路連線重新啟動WLAN自動設定服務修改電源選項修改高級電源設定重新安裝網路適配器驅動程式運行一些網路命令現在,讓我們來詳細看

WLAN可擴充性模組無法啟動 WLAN可擴充性模組無法啟動 Feb 19, 2024 pm 05:09 PM

本文詳細介紹了解決事件ID10000的方法,該事件表明無線區域網路擴充模組無法啟動。在Windows11/10PC的事件日誌中可能會顯示此錯誤。 WLAN可擴充性模組是Windows的一個元件,允許獨立硬體供應商(IHV)和獨立軟體供應商(ISV)為使用者提供客製化的無線網路特性和功能。它透過增加Windows預設功能來擴充本機Windows網路元件的功能。在作業系統載入網路元件時,WLAN可擴充性模組會作為初始化的一部分啟動。如果無線區域網路擴充模組遇到問題無法啟動,您可能會在事件檢視器的日誌中看到錯誤消

Python常用標準函式庫及第三方函式庫2-sys模組 Python常用標準函式庫及第三方函式庫2-sys模組 Apr 10, 2023 pm 02:56 PM

一、sys模組簡介前面介紹的os模組主要面向作業系統,而本篇的sys模組則主要針對的是Python解釋器。 sys模組是Python自帶的模組,它是與Python解釋器互動的一個介面。 sys 模組提供了許多函數和變數來處理 Python 執行環境的不同部分。二、sys模組常用方法透過dir()方法可以查看sys模組中帶有哪些方法:import sys print(dir(sys))1.sys.argv-取得命令列參數sys.argv作用是實作從程式外部向程式傳遞參數,它能夠取得命令列參數列

Python 的 import 是怎麼運作的? Python 的 import 是怎麼運作的? May 15, 2023 pm 08:13 PM

你好,我是somenzz,可以叫我徵哥。 Python的import是非常直覺的,但即使這樣,有時你會發現,明明套件就在那裡,我們仍會遇到ModuleNotFoundError,明明相對路徑非常正確,就是報錯ImportError:attemptedrelativeimportwithnoknownparentpackage導入同一個目錄的模組和不同的目錄的模組是完全不同的,本文透過分析使用import經常遇到的一些問題,來幫助你輕鬆搞定import,據此,你可以輕鬆創建屬

Python程式設計:詳解命名元組(namedtuple)的使用要點 Python程式設計:詳解命名元組(namedtuple)的使用要點 Apr 11, 2023 pm 09:22 PM

前言本文繼續來介紹Python集合模組,這次主要簡明扼要的介紹其內的命名元組,即namedtuple的使用。閒話少敘,我們開始-記得按讚、追蹤和轉發哦~ ^_^創建命名元組Python集合中的命名元組類namedTuples為元組中的每個位置賦予意義,並增強代碼的可讀性和描述性。它們可以在任何使用常規元組的地方使用,並且增加了透過名稱而不是位置索引方式存取欄位的能力。其來自Python內建模組collections。其使用的常規語法方式為:import collections XxNamedT

如何在 Python 中使用 DateTime 如何在 Python 中使用 DateTime Apr 19, 2023 pm 11:55 PM

所有資料在開始時都會自動分配一個「DOB」(出生日期)。因此,在某些時候處理資料時不可避免地會遇到日期和時間資料。本教學將帶您了解Python中的datetime模組以及使用一些外圍函式庫,如pandas和pytz。在Python中,任何與日期和時間有關的事情都由datetime模組處理,它將模組進一步分為5個不同的類別。類別只是與物件相對應的資料類型。下圖總結了Python中的5個日期時間類別以及常用的屬性和範例。 3個有用的片段1.將字串轉換為日期時間格式,也許是使用datet

Ansible運作方式詳解 Ansible運作方式詳解 Feb 18, 2024 pm 05:40 PM

Ansible工作原理從上面的圖可以了解到:管理端支援local、ssh、zeromq三種方式連接被管理端,預設使用基於ssh的連接,這部分對應上面架構圖中的連接模組;可以按應用類型等方式進行HostInventory(主機清單)分類,管理節點透過各類模組實現對應的操作,單一模組,單一指令的批次執行,我們可以稱為ad-hoc;管理節點可以透過playbooks實作多個task的集合實作一類功能,如web服務的安裝部署、資料庫伺服器的批次備份等。 playbooks我們可以簡單的理解為,系統透過

Ansible Ad-Hoc(點對點模式) Ansible Ad-Hoc(點對點模式) Feb 18, 2024 pm 04:48 PM

官方文件:https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html簡介Ad-hoc命令是一種臨時輸入並執行的命令,通常用於測試和調試。它們不需要永久保存,簡單來說,ad-hoc就是「即時命令」。常用模組1、command模組(預設模組)預設模組,沒有shell強大,基本上shell模組都可以支援command模組的功能。 【1】幫助ansible-doccommand#推薦使用下面這個ansible-doccomm

See all articles