午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

路由地址

路由地址定義

版本 新增功能
5.0.4 路由到類和控制器的方法支持傳入額外參數

路由地址(zhi)表(biao)(biao)示定(ding)(ding)義(yi)的(de)路由表(biao)(biao)達式最終需(xu)要(yao)路由到的(de)地址(zhi)以及一些需(xu)要(yao)的(de)額外參數(shu),支持(chi)下面(mian)5種方式定(ding)(ding)義(yi):

定義方式 定義格式
方式1:路由到模塊/控制器 '[模塊/控制器/操作]?額外參數1=值1&額外參數2=值2...'
方式2:路由到重定向地址 '外部地址'(默認301重定向) 或者 ['外部地址','重定向代碼']
方式3:路由到控制器的方法 '@[模塊/控制器/]操作'
方式4:路由到類的方法 '\完整的命名空間類::靜態方法' 或者 '\完整的命名空間類@動態方法'
方式5:路由到閉包函數 閉包函數定義(支持參數傳入)

其中(zhong)方式(shi)5我們將(jiang)會在(zai)下一個章節閉包支持中(zhong)詳(xiang)細(xi)描述(shu)。

路由到模塊/控制器/操作

這是最常用的(de)一種路由方式,把滿足條件(jian)的(de)路由規則路由到(dao)相關的(de)模塊、控(kong)制器和操作,然后由App類調度執(zhi)行相關的(de)操作。

同時會(hui)進(jin)行模塊的初始化操(cao)作(包括配置(zhi)讀(du)取(qu)、公共文件載(zai)入、行為定義載(zai)入、語(yu)言包載(zai)入等(deng)等(deng))。

路由地(di)址的(de)格式為(wei):

[模塊/控制器/]操作?參數1=值1&參數2=值2...

解析規則是從(cong)操作開始解析,然后解析控制器,最后解析模塊,例如:

// 路由到(dao)默認(ren)或(huo)者綁定模(mo)塊
'blog/:id'=>'blog/read',
// 路由到index模塊(kuai)
'blog/:id'=>'index/blog/read',

Blog類定義如(ru)下:

namespace app\index\controller;

class Blog {
    public function read($id){
        return 'read:'.$id;
    }
}

路由(you)地址中支(zhi)持多級控制(zhi)器,使用下(xia)面的方式進行設置(zhi):

'blog/:id'=>'index/group.blog/read'

表示(shi)路(lu)由(you)到下面的控制(zhi)器類,

index/controller/group/Blog

Blog類(lei)定義如下:

namespace app\index\controller\group;

class Blog {
    public function read($id){
        return 'read:'.$id;
    }
}

還可以支持路(lu)由(you)到動態的模(mo)塊(kuai)、控制(zhi)器(qi)或者操作,例如:

// action變量的值作為操作方法傳(chuan)入
':action/blog/:id' => 'index/blog/:action'
// 變量傳(chuan)入index模塊的控制器和操作方法
':c/:a'=> 'index/:c/:a'

如果關閉路由功能(neng)的話,默認也會(hui)按(an)照該規則對URL進行解析調(diao)度。

額外參數

在(zai)這種方式路由(you)跳轉(zhuan)的時(shi)(shi)候(hou)支(zhi)持額外(wai)傳入(ru)參(can)數對(額外(wai)參(can)數指的是不在(zai)URL里面(mian)的參(can)數,隱式傳入(ru)需要的操作中,有時(shi)(shi)候(hou)能(neng)夠(gou)起到一定的安全防護作用,后面(mian)我們(men)會提到)。例如(ru):

'blog/:id'=>'blog/read?status=1&app_id=5',

上面的路由規則定義中額外參數statusapp_id參數都是URL里面不(bu)存在(zai)的(de),屬于隱式傳值,當然并(bing)不(bu)一定需(xu)要用到,只是在(zai)需(xu)要的(de)時候可以使用。

路由到操作方法

路由(you)地(di)址的格式為:

@[模塊/控制器/]操作

這種方式看起來似乎和第一種是一樣的,本質的區別是直接執行某個控制器類的方法,而不需要去解析 模塊/控制器/操作(zuo)這些,同時也不會去初始化模塊。
例如,定義如下路由(you)后:

'blog/:id'=>'@index/blog/read',

系統(tong)會(hui)直接執行

Loader::action('index/blog/read');

相當于(yu)直接調(diao)用 \app\index\controller\blog類(lei)的read方法。

Blog類定義如下:

namespace app\index\controller;

class Blog {
    public function read($id){
        return 'read:'.$id;
    }
}

通(tong)常這(zhe)種方式下面,由于(yu)沒有定義當(dang)前(qian)模(mo)(mo)(mo)塊名、當(dang)前(qian)控(kong)制器名和(he)當(dang)前(qian)方法名 ,從而導致視(shi)圖的默認模(mo)(mo)(mo)板規則(ze)失效,所以這(zhe)種情況下面,如(ru)果使用了視(shi)圖模(mo)(mo)(mo)板渲染,則(ze)必須傳入明確的參(can)數。

路由到類的方法

路由(you)地址的格式為(動(dong)態方法):

\類的命名空間\類名@方法名

或者(靜態方法(fa))

\類的命名空間\類名::方法名

這種方(fang)式更(geng)進(jin)一步,可以支持執行任何類的方(fang)法,而不僅(jin)僅(jin)是執行控制器的操作方(fang)法,例如:

'blog/:id'=>'\app\index\service\Blog@read',

執行的是 \app\index\service\Blog類的read方法。
也支持(chi)執(zhi)行某個靜態方法(fa),例如:

'blog/:id'=>'\app\index\service\Blog::read',

V5.0.4+版本開始,支持傳入額(e)外(wai)的參(can)數作為方法的參(can)數調用(yong)(用(yong)于(yu)參(can)數綁定),例如:

'blog/:id'=>'\app\index\service\Blog::read?status=1',

路由到重定向地址

重(zhong)定(ding)向的(de)(de)外部地址必須以“/”或者http開頭(tou)的(de)(de)地址。

如果路由地址(zhi)以(yi)“/”或者“http”開頭(tou)則會認(ren)為是一(yi)個重定(ding)向地址(zhi)或者外部地址(zhi),例如:

'blog/:id'=>'/blog/read/id/:id'

'blog/:id'=>'blog/read'

雖然都是路由到同一個地址,但是前者采用的是301重定向的方式路由跳轉,這種方式的好處是URL可以比較隨意(包括可以在URL里面傳入更多的非標準格式的參數),而后者只是支持模塊和操作地址。舉個例子,如果我們希望avatar/123重定向到
/member/avatar/id/123_small的話,只能使用:

'avatar/:id'=>'/member/avatar/id/:id_small'

路由地址采用重定向地址的話,如(ru)果要引用動(dong)態(tai)變量,直(zhi)接使用動(dong)態(tai)變量即可。

采用重定(ding)向到外部(bu)地址通常對網站改版后的(de)URL遷移過(guo)程非常有用,例如:

'blog/:id'=>'//blog.thinkphp.cn/read/:id'

表(biao)示當前網站(zhan)(可能是(shi)//thinkphp.cn )的 blog/123地址(zhi)會直(zhi)接重(zhong)定向(xiang)到 

文檔最后更新時間:2018-04-25 19:29:05

文檔
目錄(lu)

深色
模(mo)式

切換
寬度