【问题标题】:Turn off default routes in Kohana 3?在 Kohana 3 中关闭默认路由?
【发布时间】:2011-03-22 18:52:19
【问题描述】:

我相信我知道如何做到这一点,但想通过我的社区窥视者进行验证。 =)

这是一个例子:

我有一个名为“tami”的控制器类,带有一个动作“索引”。

我知道,如果我希望某人通过“/tami/”或“/tami/index”以外的 URL 访问该控制器/操作组合,那么我应该通过以下方式添加路由:

Route::set('pretty_tami', 'these-are-my-initials(/<action>)')
    ->defaults(array(
        'controller' => 'tami',
        'action' => 'index',
    ));

但是,用户仍然可以通过/tami/ 访问此页面。

如何关闭默认路由,让唯一有效的路由是我定义的路由?

我假设我可以删除kohana/application/bootstrap.php 中的默认路由。那是对的吗?还是会破坏其他东西?

【问题讨论】:

  • 别害怕,APPPATH 目录中的每个脚本都可以根据您的需要进行更改。

标签: php routing kohana url-routing kohana-3


【解决方案1】:

我想说的和@simshaun 完全一样——要么删除默认路由(让其他控制器无法访问),要么检查Controller_Tami 中的before() 函数以查看URI 是否是您所追求的。

如果您使用的是 Kohana 3.1,you can now use lambda logic/anonymous functions to define your routes

这样的事情会从控制器中取出额外的路由逻辑(这很好,因为我们将它保存在一个地方):

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>)))'
);

我还没有使用过,但它看起来非常强大。

【讨论】:

  • 谢谢你,它真的很有帮助。
【解决方案2】:

我认为最简单的方法是删除引导文件中的默认路由,是的。但是,您没有手动指定路由的任何控制器都无法再访问。

我要做的是创建一个类,例如Controller_Derouter Controller_Tami 扩展。使用 Controller_Derouter 中的 before() 方法来测试控制器是否是从默认路由访问的,如果是,则抛出 404。我认为您应该能够通过将 $this-&gt;request-&gt;controller 与第一个 URI 段进行比较来做到这一点。

编辑:如果您只打算禁用 Tami 控制器的默认路由,则不需要上述解决方案。如果是这种情况,您可以直接在 Tami 控制器中实现 before() 方法。

【讨论】:

  • 所以,显然这并不像我想象的那么普遍。感谢您的建议!
  • 正是我想说的。删除默认路由或检查控制器逻辑中的路由。此外,在 KO3.1 you can use lambda logic to define your routes 中,这可能对此有用。为此写一个答案,但肯定比这个答案更复杂。
【解决方案3】:

可能是这样的?

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',
    ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多