Php 关闭Kohana 3中的默认路线?
我相信我知道如何做到这一点,但我想通过我的精彩社区窥视来验证 下面是一个例子: 我有一个名为“tami”的控制器类,带有一个操作“index” 我知道,如果我希望有人通过“/tami/”或“/tami/index”以外的URL访问该控制器/操作组合,那么我应该通过以下方式添加一个路由: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
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>)))'
);