如何在kohanphp中扩展URL上的参数


How To Extend Parameters on the URL in KohanaPHP?

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

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

…其中"博客"是控制器文件夹中的blog.php,"编辑"是控制器方法,4000是参数1,我可以使用谁想要编辑记录,3200是参数2,我可以使用记录ID?

我得到博客和编辑部分。问题是4000和3200。当我运行该URL时,我得到一个错误:"404 -无法找到匹配blog/edit/4000/3200的路由"

我是否被迫对。htaccess文件做一些不寻常的事情,或者在问号之后将参数作为查询参数传递?

这说明了该怎么做:

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控制器文件中,我现在可以传递两个参数到"action_edit"类方法中,如下所示:

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

你需要一个这样的路由在你的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)教程第6部分"