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...