最大。 kohana路线上的参数

时间:2011-12-21 17:01:07

标签: parameters kohana max routes

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!
}

3 个答案:

答案 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()。希望现在适合你。