【问题标题】:Kohana routing: can't access route parametersKohana 路由:无法访问路由参数
【发布时间】:2013-05-08 21:05:32
【问题描述】:

在 Kohana 3.2 中,我使用默认路由进行简单的控制器/动作/id 设置:

Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
    'controller' => 'home',
    'action'     => 'index',
    'id'         => '0',
));

根据文档,将控制器和操作连接到这样的简单路由非常容易,但控制器中永远无法访问路由参数(在本例中为 id)。

例如,我有一条路线:

/user/info/123

处理该路由的控制器被成功调用:

    public function action_info()
{
    $id = $this->request->param('id');
    echo "id=" . $id; //nothing
    echo "is_null=" . is_null($this->request->param('id')); //1
}

但是 $this->request->param('id') 总是设置为 null。

这似乎是我能想到的最简单的例子,我在这里做错了什么?

【问题讨论】:

  • 为什么你的代码说它应该进入动作index但它正在运行action_info
  • 那部分无关紧要,它只是说默认操作(如果未指定)将是索引,但是当我点击 /info/ url Kohana 路由到该操作。

标签: php url-routing kohana


【解决方案1】:

原来我正在与扩展 Kohana 合作的公司使用 request->param() 函数来做某事,却没有意识到这已经是 Kohana 中的一个函数,这破坏了内置功能。使用内置的 Kohana 请求功能可以解决此问题。

所以这不是问题,因为毕竟这是获取请求参数的正确方法。 :)

【讨论】:

    【解决方案2】:

    你试过了吗?

    Route::set('default', '(<controller>(/<action>(/<id>)))')
      ->defaults(array(
        'controller' => 'home',
        'action'     => 'index',
        'id'         => '\d+',
    ));
    

    【讨论】:

    • 我试过这个,但结果相同。据我了解,Route::set 的第二个参数可用于为路由设置正则表达式,但我目前没有这样做,我认为这不适用于默认数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多