[英]Turn off default routes in Kohana 3?
我相信我知道該怎么做,但是想與我的社區友人分享一下。 =)
這是一個例子:
我有一個名為“ tami”的Controller類,帶有一個動作“ index”。
我知道,如果我希望有人通過除“ / tami /”或“ / tami / index”以外的URL訪問該控制器/操作組合,那么我應該通過以下方式添加一條路由:
Route::set('pretty_tami', 'these-are-my-initials(/<action>)')
->defaults(array(
'controller' => 'tami',
'action' => 'index',
));
但是,用戶仍然可以通過/tami/
訪問此頁面。
我假設我可以刪除在kohana/application/bootstrap.php
找到的默認路由。 那是對的嗎? 還是會破壞其他東西?
我認為最簡單的方法是刪除引導文件中的默認路由,是的。 但是,無法再訪問尚未手動指定路由的任何控制器。
我會做的是創建一個類,如Controller_Derouter
那Controller_Tami延伸。 使用Controller_Derouter中的before()
方法測試是否通過默認路由訪問了控制器,如果是,則拋出404。我認為您應該可以通過將$this->request->controller
與第一個進行比較來做到這一點。 URI段。
編輯:如果僅計划僅禁用Tami控制器的默認路由,則上述解決方案是不必要的。 如果是這種情況,您可以直接在Tami控制器中實現before()方法。
我想說的與@simshaun完全一樣-刪除默認路由(使其他控制器無法訪問),或者在Controller_Tami
檢查before()
函數中的uri,以查看它是否在后面。
如果您使用的是Kohana 3.1, 則現在可以使用lambda邏輯/匿名函數來定義路線 。
這樣的事情會使多余的路由邏輯脫離控制器(這很好,因為我們將其保留在一個位置):
Route::set('default', function($uri)
{
if ($uri == 'tami' OR $uri == 'tami/index')
{
// Route not allowed by the default methods
throw new Kohana_404_Exception("Route not permitted");
}
},
'(<controller>(/<action>(/<id>)))'
);
我尚未使用過的東西,但看起來功能強大。
也許是這樣的?
Route::set('pretty_tami', 'these-are-my-initials/<action>')
->defaults(array(
'controller' => 'tami',
));
因此,不會有默認action
。 您可能想用正則表達式更新default
路由(如果仍然有)以排除tami
。
Route::set('default', '(<controller>(/<action>(/<id>)))', array('controller' => '/^(?!tami)/'))
->defaults(array(
'controller' => 'welcome',
'action' => 'index',
));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.