Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关闭Kohana 3中的默认路线?_Php_Routing_Kohana_Url Routing_Kohana 3 - Fatal编程技术网

Php 关闭Kohana 3中的默认路线?

Php 关闭Kohana 3中的默认路线?,php,routing,kohana,url-routing,kohana-3,Php,Routing,Kohana,Url Routing,Kohana 3,我相信我知道如何做到这一点,但我想通过我的精彩社区窥视来验证 下面是一个例子: 我有一个名为“tami”的控制器类,带有一个操作“index” 我知道,如果我希望有人通过“/tami/”或“/tami/index”以外的URL访问该控制器/操作组合,那么我应该通过以下方式添加一个路由: Route::set('pretty_tami', 'these-are-my-initials(/<action>)') ->defaults(array( 'cont

我相信我知道如何做到这一点,但我想通过我的精彩社区窥视来验证

下面是一个例子:

我有一个名为“tami”的控制器类,带有一个操作“index”

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

Route::set('pretty_tami', 'these-are-my-initials(/<action>)')
    ->defaults(array(
        'controller' => 'tami',
        'action' => 'index',
    ));
Route::set('pretty_tami','这是我的缩写(/))
->默认值(数组)(
“控制器”=>“塔米”,
“操作”=>“索引”,
));
但是,用户仍然可以通过
/tami/
访问此页面

如何关闭默认路由,使唯一有效的路由是我定义的路由?
我假设我可以删除在
kohana/application/bootstrap.php
中找到的默认路由。对吗?或者这会破坏其他东西吗?

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

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

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

可能是这样吗

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

我想说的与@simshaun完全相同-要么删除默认路由(让其他控制器无法访问),要么在
Controller\u Tami
中的
before()
函数中检查uri,看看它是否是您想要的

如果您使用的是Kohana 3.1

类似这样的操作会将额外的路由逻辑从控制器中移除(这很好,因为我们将其保留在一个位置):

Route::set('default',函数($uri)
{
如果($uri=='tami'或$uri=='tami/index')
{
//默认方法不允许路由
抛出新的Kohana_404_异常(“不允许路由”);
}
},
'((/(/)))'
);

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

所以,显然这并不像我想象的那么普遍。谢谢你的建议!正是我想说的。删除默认路径或在控制器逻辑中检查路由。此外,在KO3.1中,这可能会被证明是有用的。为此编写一个答案,但肯定比这个答案更复杂。别担心,APPPATH目录中的每个脚本都可以根据您的需要进行更改。谢谢您的帮助,这真的很有帮助。
Route::set('default', '(<controller>(/<action>(/<id>)))', array('controller' => '/^(?!tami)/'))
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));
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>)))'
);