如何将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部分"