kohana中的路由規則

2021-06-01 11:13:17 字數 3344 閱讀 2281

kohana的路由規則是非常強大的。首先必須確認的是路由的匹配原則是有順序,當一條路由規則匹配成功時,就停止匹配,也就是說在其後面定義的路由規則將不再被執行,因此最後的一條路由規則幾乎可以匹配所有的路由規則,它常常類似於下面這樣:

在bootstrap.php檔案中:

route::set('default', '((/(/)))')

->defaults(array(

'controller' => 'home',

'action' => 'index',

));

首先需要明白這些語句的含義。

這條路由的名字叫"default";定義了三個路由鍵,「controller」、「action」、"id".這三個路由鍵都不是必須的(因為他們都包含在括號裡面。),尖括號裡面的值就是路由鍵的名字。如果輸入的url中沒有controller將預設的controller是home。路由鍵的名字可以隨便命名,但是「directory」、'controller'、『action』具有特殊的用意,他們定義了使用哪個controller的那個action,directory定義了controller所在的檔案目錄。

在路由中我們可以定義正則來限制路由所能匹配的範圍。下面的例子是kohana手冊中的一些例子,比較實用:

/*

* authentication shortcuts

*/route::set('auth', '',

array(

'action' => '(login|logout)'

))->defaults(array(

'controller' => 'auth'

)); /*

* multi-format feeds

* 452346/comments.rss

* 5373.json

*/route::set('feeds', '(/).',

array(

'user_id' => '\d+',

'format' => '(rss|atom|json)',

))->defaults(array(

'controller' => 'feeds',

'action' => 'status',

)); /*

* static pages

*/route::set('static', '.html',

array(

'path' => '[a-za-z0-9_/]+',

))->defaults(array(

'controller' => 'static',

'action' => 'index',

)); /*

* you don't like slashes?

* editgallery:bahamas

* watch:wakeboarding

*/route::set('gallery', '():',

array(

'controller' => '[a-z][a-z]++',

'action' => '[a-z][a-z]++',

))->defaults(array(

'controller' => 'slideshow',

)); /*

* quick search

*/route::set('search', ':', array('query' => '.*'))

->defaults(array(

'controller' => 'search',

'action' => 'index',

));

上面的例子可以看出正確的使用路由可以做許多的事情,上面的例子有一些也比較誇張,例如那個使用大寫字母來分離引數的例子我在本機上測試報錯,最後search的例子也是報錯,估計是伺服器設定的問題,不能使用「:」。

路由的匹配是通過正則語法來匹配的。

也就是說這條路由規則只能匹配類似下面的這樣的

http:kohana.dev/controller/action/id ,如在id的後面再加'/'後面再加引數就不能匹配了

我們可以使用這種方式來糾正這個問題,這種方法也叫做忽略路由溢位

route::set('default', '((/(/(/))))', array('params'=>'.*'))

->defaults(array(

'controller' => 'home',

'action' => 'index',

));

這條路由規則將匹配類似「」這樣的url,這時"params"這個路由值裡面將是「key/value/key/value」;我們可以很方便的把這些鍵值分離出來,類似下面這樣:

$params = $this->request->param('params');

$params = explode('/', $params);

$num = 0;

$count = count($params);

$param = array();

while ($num < $count)

我們可以建立多個路由規則,前面已經說的路由規則是按照順序匹配的,當找到乙個匹配的規則時將會停止匹配,因此越是寫在前面的路由規則就越嚴格,匹配的情況就應該越少,

在新增路由時要給其取乙個唯一的名字,如果名字相同則後面的路由將覆蓋前面的路由規則。從使用者手冊也可以看出,kohana是鼓勵使用者使用多路由的。

下面是乙個使用路由規則來載入靜態檔案(css,js)的例項

首先定義路由規則:

bootstrap.php

// static file serving (css, js, images)

route::set('frame/media', 'media/www(/)', array('file' => '.+'))

->defaults(array(

'controller' => 'frame',

'action' => 'media',

'file' => null,

));

frame.php

class controller_frame extends controller_template else 	}	

public function after()

parent::after();

}} // end welcome

SDN 網路中的路由規則(二)

因為畢業設計的緣故,準備向計算機方向讀研的我偶然結識了sdn與openflow這兩個神奇的傢伙。sdn的中文名稱為軟體定義網路,然而它的英文拼寫除了正規的文獻和專業人員,幾乎很少被正確地表示出來。其實我一開始也是這麼以為的 甚至一開始我的解讀是 software definition network...

SDN網路中的路由規則(四)

因為畢業設計的緣故,準備向計算機方向讀研的我偶然結識了sdn與openflow這兩個神奇的傢伙。sdn的中文名稱為軟體定義網路,然而它的英文拼寫除了正規的文獻和專業人員,幾乎很少被正確地表示出來。其實我一開始也是這麼以為的 甚至一開始我的解讀是 software definition network...

Vue路由規則中定義引數

vue使用routerlinke定義引數的時候 路由規則中不需要更改任何屬性。路由其實就是我們在html中定義的錨點,點選這個連線跳轉乙個錨點。vue中的路由也是這個原理,前提是路由必須建立在例項之前。登入 router link router link to zhuce 註冊 router lin...