ThinkPHP筆記-路由

路由

利用路由功能,可以讓你的URL地址更加簡(jiǎn)潔和優(yōu)雅。ThinkPHP支持對(duì)模塊的URL地址進(jìn)行路由操作(路由功能是針對(duì)PATHINFO模式或者兼容URL而設(shè)計(jì)的,暫時(shí)不支持普通URL模式)。
路由功能可以針對(duì)模塊,也可以針對(duì)全局,針對(duì)模塊的路由則需要在模塊配置文件中開啟和設(shè)置路由,如果是針對(duì)全局的路由,則是在公共模塊的配置文件中開啟和設(shè)置
模塊路由和全局路由配置的區(qū)別在于,全局路由的路由地址必須包含模塊。

啟用路由

啟用路由
'URL_ROUTER_ON' => true,

路由規(guī)則配置:

模塊的配置文件中使用**URL_ROUTE_RULES**參數(shù)進(jìn)行配置,配置格式是一個(gè)數(shù)組,每個(gè)元素都代表一個(gè)路由規(guī)則
'URL_ROUTE_RULES'=>array(
 'news/:year/:month/:day' => array('News/archive', 'status=1'),
 'news/:id' => 'News/read',
 'news/read/:id' => '/news/:1',
),

路由的定義

'路由表達(dá)式'=>'路由地址'或者:array('路由表達(dá)式','路由地址','傳入?yún)?shù)')

路由表達(dá)式包括規(guī)則路由和正則路由的定義表達(dá)式,只能使用字符串。

  • 規(guī)則路由表達(dá)式

規(guī)則表達(dá)式通常包含靜態(tài)地址和動(dòng)態(tài)地址,或者兩種地址的結(jié)合。

'my' => 'Member/myinfo', // 靜態(tài)地址路由
'blog/:id' => 'Blog/read', // 靜態(tài)地址和動(dòng)態(tài)地址結(jié)合
'new/:year/:month/:day'=>'News/read', // 靜態(tài)地址和動(dòng)態(tài)地址結(jié)合'
:user/:blog_id' =>'Blog/read',// 全動(dòng)態(tài)地址

數(shù)字約束

支持對(duì)變量的類型檢測(cè),但僅僅支持?jǐn)?shù)字類型的約束定義,例如
'blog/:id\d'=>'Blog/read',

函數(shù)支持

可以支持對(duì)路由變量的函數(shù)過濾,例如:'blog/:id\d|md5'=>'Blog/read',
表示對(duì)匹配到的id變量進(jìn)行md5處理,也就是說(shuō),實(shí)際傳入read操作方法的$_GET['id']
其實(shí)是md5($_GET['id'])。

可選定義

支持對(duì)路由參數(shù)的可選定義,例如:
'blog/:year\d/[:month\d]'=>'Blog/archive',
[:month\d]
變量用[ ]包含起來(lái)后就表示該變量是路由匹配的可選變量。

完全匹配

規(guī)則匹配檢測(cè)的時(shí)候只是對(duì)URL從頭開始匹配,只要URL地址包含了定義的路由規(guī)則就會(huì)匹配成功,如果希望完全匹配,可以使用$符號(hào),例如:
'new/:cate$'=> 'News/category'

  • 正則路由表達(dá)式

正則定義必須以“/”開頭,否則就視為規(guī)則表達(dá)式。
'/^new\/(\d{4})\/(\d{2})$/' => 'News/achive?year=:1&month=:2',
正則定義也支持函數(shù)過濾處理,例如:
'/^new\/(\d{4})\/(\d{2})$/' => 'News/achive?year=:1|format_year&month=:2',
其中 year=:1|format_year 就表示對(duì)匹配到的變量進(jìn)行format_year函數(shù)處理(假設(shè)format_year是一個(gè)用戶自定義函數(shù))。

靜態(tài)路由

靜態(tài)路由定義中不包含動(dòng)態(tài)參數(shù),靜態(tài)路由不需要遍歷路由規(guī)則而是直接定位,因此效率較高,但作用也有限。
靜態(tài)路由的路由地址 只支持字符串,格式:[控制器/操作?]參數(shù)1=值1&參數(shù)2=值2。
'URL_MAP_RULES'=>array( 'new/top' => 'news/index?type=top')

閉包支持

'URL_ROUTE_RULES'=>array( 'hello/:name' => function($name){ echo 'Hello,'.$name; })
繼續(xù)執(zhí)行
默認(rèn)的情況下,使用閉包定義路由的話,一旦匹配到路由規(guī)則,執(zhí)行完閉包方法之后,就會(huì)中止后續(xù)執(zhí)行。如果希望閉包函數(shù)執(zhí)行后,后續(xù)的程序繼續(xù)執(zhí)行,可以在閉包函數(shù)中使用布爾類型的返回值,例如:

'hello/:name' => function($name){ 
   echo 'Hello,'.$name.'<br/>'; 
   $_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;
   return false; } //返回false則可繼續(xù)執(zhí)行 blog控制器中的read方法

路由地址

路由地址(可以支持傳入額外參數(shù))表示前面的路由表達(dá)式需要路由到的地址(包括內(nèi)部地址和外部地址),并且允許隱式傳入U(xiǎn)RL里面沒有的一些參數(shù),這里允許使用字符串或者數(shù)組方式定義,特殊情況下還可以采用閉包函數(shù)定義路由功能。
支持下面6種方式定義:
定義方式 定義格式
方式1:路由到內(nèi)部地址(字符串) '[控制器/操作]?額外參數(shù)1=值1&額外參數(shù)2=值2...'
方式2:路由到內(nèi)部地址(數(shù)組)參數(shù)采用字符串方式 array('[控制器/操作]','額外參數(shù)1=值1&額外參數(shù)2=值2...')
方式3:路由到內(nèi)部地址(數(shù)組)參數(shù)采用數(shù)組方式 array('[控制器/操作]',array('額外參數(shù)1'=>'值1','額外參數(shù)2'=>'值2'...)[,路由參數(shù)])
方式4:路由到外部地址(字符串)301重定向 '外部地址'
方式5:路由到外部地址(數(shù)組)可以指定重定向代碼 array('外部地址','重定向代碼'[,路由參數(shù)])
方式6:閉包函數(shù) function($name){ echo 'Hello,'.$name;}

路由地址參數(shù)

路由參數(shù)

當(dāng)路由地址采用數(shù)組方式定義的時(shí)候,還可以傳入額外的路由參數(shù)。
這些參數(shù)的作用是限制前面定義的路由規(guī)則的生效條件。

限制URL后綴

例如:
'blog/:id'=>array('blog/read','status=1&app_id=5',array('ext'=>'html')),
就可以限制html后綴訪問該路由規(guī)則才能生效。

限制請(qǐng)求類型

例如:
'blog/:id'=>array('blog/read','status=1&app_id=5',array('method'=>'get')),
就限制了只有GET請(qǐng)求該路由規(guī)則才能生效。

自定義檢測(cè)

支持自定義檢測(cè),例如: 例如:
'blog/:id'=>array('blog/read','status=1&app_id=5',array('callback'=>'checkFun')),
就可以自定義checkFun函數(shù)來(lái)檢測(cè)是否生效,如果函數(shù)返回false則表示不生效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • [toc] 概述 由于ThinkPHP5.0默認(rèn)采用的URL規(guī)則是: http://server/module/c...
    呦丶耍脾氣閱讀 8,591評(píng)論 0 1
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,438評(píng)論 6 13
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評(píng)論 25 709
  • 休假幾天,來(lái)深圳找?guī)熜纸涣鲗W(xué)習(xí)~聽說(shuō)他有好幾面大鑼一直想體驗(yàn)一下,這回算是心想事成了。 嫂子學(xué)芳療,同時(shí)也學(xué)習(xí)各種...
    Crystal蓓蓓閱讀 1,991評(píng)論 1 3

友情鏈接更多精彩內(nèi)容