如何在KohanaPHP中扩展URL的参数?

时间:2011-04-10 00:15:30

标签: php url parameters kohana kohana-3

如何将URL中的额外参数传递给KohanaPHP(版本3.1+),如此...

http://example.com/blog/edit/4000/3200

...其中“blog”是controllers文件夹中的blog.php,“edit”是控制器方法,4000是参数1,我可以用于谁想要编辑记录,3200是参数2我可以用于记录ID吗?

我得到了博客并编辑了部分内容。问题是4000和3200.当我运行该URL时,我收到一个错误:“404 - 无法找到路由匹配博客/编辑/ 4000/3200”

我是否不得不使用.htaccess文件做一些不寻常的事情,或者在问号后将参数作为查询参数传递?

2 个答案:

答案 0 :(得分:2)

这解释了该怎么做:

http://kohanaframework.org/3.1/guide/kohana/routing

但实质上,我需要编辑application \ bootstrap.php文件并更改它:

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

到此:

Route::set('default', '(<controller>(/<action>(/<param1>)(/<param2>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index'
    ));

现在在我的blog.php控制器文件中,我现在可以将2个参数传递给“action_edit”类方法,如下所示:

public function action_edit() {
  $sParam1 = $this->request->param('param1');
  $sParam2 = $this->request->param('param2');
  $this->response->body('param1=' . $sParam1 . ' param2=' . $sParam2);
}

答案 1 :(得分:0)

你需要在bootstrap.php中使用这样的路线:

Route::set('blog_edit', 'blog/edit/<param1>(/<param2>)')
        array(
            'param1' => '[[:digit:]]{1,}',
            'param2' => '[[:digit:]]{1,}',
        ))
    ->defaults(array(
        'controller' => 'blog',
        'action'     => 'edit',
    ));

注意:()”使param2成为可选。

在您的控制器中,您可以通过Request对象访问参数作为方法参数

class Controller_Blog
{
    public function action_edit($param1, $param2)
    {
        // or
        $param1 = $this->request->param('param1');
        $param2 = $this->request->param('param2');
        // [...]
    }
}

我没有测试过这段代码,但它应该非常接近您的需求。

引自“Kohana PHP 3.0 (KO3) Tutorial Part 6