Route::set('category', 'category/date/<id>(/<year>)', array('id' => '[0-9]+', 'year' => '[0-9]+'))
->defaults(array(
'controller' => 'category',
'action' => 'date',
));
kohana 3.2路线上的参数是否有上限?
我已经在我的引导程序中实现了这条路线,但每当我尝试传递year
值时,我都会收到404错误!
单独传递ID工作正常。
我错过了什么吗?
这是处理此路线的控制器操作:
public function action_date() {
$id = $this->request->param('id');
$year = $this->request->param('year');
if(!isset($year) && $year == ""){
$year = date("Y", time());
}
//Do fancy stuff here... and hand it to the view!
}
答案 0 :(得分:2)
不,没有限制。确保此路线高于您的默认路线(或一起删除所有路线)。
答案 1 :(得分:1)
Kohana应该将其引导到正确的行动,它对我有用。我的猜测是你用一个名为'category'的路由覆盖该路由,或者它被另一个路由匹配,该路由会抛出一个Kohana_Exception_404。
您应该能够通过查看堆栈跟踪来解析/验证是否从方法中抛出了Kohana_Exception_404。
路由名称用作存储路由的阵列的键名,如下所示。使用相同的名称两次将覆盖该名称下的先前路由。
public static function set($name, $uri_callback = NULL, $regex = NULL)
{
return Route::$_routes[$name] = new Route($uri_callback, $regex);
}
您可以在某个操作中使用以下内容来查看用于路由的所有路由:$this->response->body(Debug::vars(Route::all()));
然后,您可以检查“类别”路由或类似路由的已编译正则表达式。
答案 2 :(得分:0)
尝试制作非可选项(删除括号),然后查看它是否有效。此外,您的代码中似乎存在逻辑错误。在原始代码中,将始终设置$ year,以便始终跳过if语句。尝试使用以下命令替换if语句及其前面的行:
$year = $this->request->param('year', date('Y'));
哦,作为一个brucey奖金,date()默认为当前时间戳,因此不需要额外调用time()。希望现在适合你。