簡體   English   中英

關閉Kohana 3中的默認路線?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM