如何将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文件做一些不寻常的事情,或者在问号后将参数作为查询参数传递?
答案 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');
// [...]
}
}
我没有测试过这段代码,但它应该非常接近您的需求。