溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Thinkphp路由定義偽靜態(tài)規(guī)則的方法

發(fā)布時間:2022-04-14 15:33:43 來源:億速云 閱讀:458 作者:zzz 欄目:編程語言

這篇文章主要介紹了Thinkphp路由定義偽靜態(tài)規(guī)則的方法的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Thinkphp路由定義偽靜態(tài)規(guī)則的方法文章都會有所收獲,下面我們一起來看看吧。

Thinkphp 6.0路由定義 偽靜態(tài)規(guī)則

要使用Route類注冊路由必須首先在路由定義文件開頭添加引用(后面不再重復(fù)說明)

use think\facade\Route;

注冊路由

最基礎(chǔ)的路由定義方法是:

Route::rule('路由表達(dá)式', '路由地址', '請求類型');

例如注冊如下路由規(guī)則(假設(shè)為單應(yīng)用模式):

// 注冊路由到News控制器的read操作
Route::rule('new/:id','News/read');

我們訪問:

http://serverName/new/5

會自動路由到:

http://serverName/news/read/id/5

并且原來的訪問地址會自動失效。

可以在rule方法中指定請求類型(不指定的話默認(rèn)為任何請求類型有效),例如:

Route::rule('new/:id', 'News/update', 'POST');

請求類型參數(shù)不區(qū)分大小寫。

表示定義的路由規(guī)則在POST請求下才有效。如果要定義GETPOST請求支持的路由規(guī)則,可以用:

Route::rule('new/:id','News/read','GET|POST');

不過通常我們更推薦使用對應(yīng)請求類型的快捷方法,包括:

類型描述快捷方法
GETGET請求get
POSTPOST請求post
PUTPUT請求put
DELETEDELETE請求delete
PATCHPATCH請求patch
*任何請求類型any

快捷注冊方法的用法為:

Route::快捷方法名('路由表達(dá)式', '路由地址');

使用示例如下:

Route::get('new/<id>','News/read'); // 定義GET請求路由規(guī)則
Route::post('new/<id>','News/update'); // 定義POST請求路由規(guī)則
Route::put('new/:id','News/update'); // 定義PUT請求路由規(guī)則
Route::delete('new/:id','News/delete'); // 定義DELETE請求路由規(guī)則
Route::any('new/:id','News/read'); // 所有請求都支持的路由規(guī)則

注冊多個路由規(guī)則后,系統(tǒng)會依次遍歷注冊過的滿足請求類型的路由規(guī)則,一旦匹配到正確的路由規(guī)則后則開始執(zhí)行最終的調(diào)度方法,后續(xù)規(guī)則就不再檢測。

規(guī)則表達(dá)式

規(guī)則表達(dá)式通常包含靜態(tài)規(guī)則和動態(tài)規(guī)則,以及兩種規(guī)則的結(jié)合,例如下面都屬于有效的規(guī)則表達(dá)式:

Route::rule('/', 'index'); // 首頁訪問路由
Route::rule('my', 'Member/myinfo'); // 靜態(tài)地址路由
Route::rule('blog/:id', 'Blog/read'); // 靜態(tài)地址和動態(tài)地址結(jié)合
Route::rule('new/:year/:month/:day', 'News/read'); // 靜態(tài)地址和動態(tài)地址結(jié)合
Route::rule(':user/:blog_id', 'Blog/read'); // 全動態(tài)地址

規(guī)則表達(dá)式的定義以/為參數(shù)分割符(無論你的PATH_INFO分隔符設(shè)置是什么,請確保在定義路由規(guī)則表達(dá)式的時候統(tǒng)一使用/進(jìn)行URL參數(shù)分割,除非是使用組合變量的情況)。

每個參數(shù)中可以包括動態(tài)變量,例如:變量或者<變量>都表示動態(tài)變量(新版推薦使用第二種方式,更利于混合變量定義),并且會自動綁定到操作方法的對應(yīng)參數(shù)。

你的URL訪問PATH_INFO分隔符使用pathinfo_depr配置,但無論如何配置,都不影響路由的規(guī)則表達(dá)式的路由分隔符定義。

可選變量

支持對路由參數(shù)的可選定義,例如:

Route::get('blog/:year/[:month]','Blog/archive');
// 或者
Route::get('blog/<year>/<month?>','Blog/archive');

變量用[ ]包含起來后就表示該變量是路由匹配的可選變量。

以上定義路由規(guī)則后,下面的URL訪問地址都可以被正確的路由匹配:

http://serverName/index.php/blog/2015
http://serverName/index.php/blog/2015/12

采用可選變量定義后,之前需要定義兩個或者多個路由規(guī)則才能處理的情況可以合并為一個路由規(guī)則。

可選參數(shù)只能放到路由規(guī)則的最后,如果在中間使用了可選參數(shù)的話,后面的變量都會變成可選參數(shù)。

完全匹配

規(guī)則匹配檢測的時候默認(rèn)只是對URL從頭開始匹配,只要URL地址開頭包含了定義的路由規(guī)則就會匹配成功,如果希望URL進(jìn)行完全匹配,可以在路由表達(dá)式最后使用$符號,例如:

Route::get('new/:cate$', 'News/category');

這樣定義后

http://serverName/index.php/new/info

會匹配成功,而

http://serverName/index.php/new/info/2

則不會匹配成功。

如果是采用

Route::get('new/:cate', 'News/category');

方式定義的話,則兩種方式的URL訪問都可以匹配成功。

如果需要全局進(jìn)行URL完全匹配,可以在路由配置文件中設(shè)置

// 開啟路由完全匹配
'route_complete_match'   => true,

開啟全局完全匹配后,如果需要對某個路由關(guān)閉完全匹配,可以使用

Route::get('new/:cate', 'News/category')->completeMatch(false);

額外參數(shù)

在路由跳轉(zhuǎn)的時候支持額外傳入?yún)?shù)對(額外參數(shù)指的是不在URL里面的參數(shù),隱式傳入需要的操作中,有時候能夠起到一定的安全防護(hù)作用,后面我們會提到)。例如:

Route::get('blog/:id','blog/read')
    ->append(['status' => 1, 'app_id' =>5]);

上面的路由規(guī)則定義中statusapp_id參數(shù)都是URL里面不存在的,屬于隱式傳值。可以針對不同的路由設(shè)置不同的額外參數(shù)。

如果append方法中的變量和路由規(guī)則存在沖突的話,append方法傳入的優(yōu)先。

路由標(biāo)識

如果你需要快速的根據(jù)路由生成URL地址,可以在定義路由的時候指定生成標(biāo)識(但要確保唯一)。

例如

// 注冊路由到News控制器的read操作
Route::rule('new/:id','News/read')
    ->name('new_read');

生成路由地址的時候就可以使用

url('new_read', ['id' => 10]);

如果不定義路由標(biāo)識的話,系統(tǒng)會默認(rèn)使用路由地址作為路由標(biāo)識,例如可以使用下面的方式生成

url('News/read', ['id' => 10]);

強(qiáng)制路由

在路由配置文件中設(shè)置

'url_route_must'		=>  true,

將開啟強(qiáng)制使用路由,這種方式下面必須嚴(yán)格給每一個訪問地址定義路由規(guī)則(包括首頁),否則將拋出異常。

首頁的路由規(guī)則采用/定義即可,例如下面把網(wǎng)站首頁路由輸出Hello,world!

Route::get('/', function () {
    return 'Hello,world!';
});

關(guān)于“Thinkphp路由定義偽靜態(tài)規(guī)則的方法”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Thinkphp路由定義偽靜態(tài)規(guī)則的方法”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI