我可以帮您翻译成中文:我能在Kohana中设置路由以仅匹配特定的HTTP方法(GET / POST /等)吗?

8
我正在探索一些PHP框架,目前最受欢迎的是Kohana。
由于我有Rails背景,习惯了Rails社区所谓的“RESTful”路由。因此,“GET /posts”显示所有帖子,并由Posts Controller的index方法处理。“POST /posts”创建一个新的post对象,并由Posts Controller的不同方法处理。
由于这两个请求中的路径都相同,所以路由器需要根据HTTP方法做出决策。
Kohana的路由器能够实现这一点吗?
3个回答

8

Kohana默认不支持RESTful路由,但有一个RESTful模块可以添加支持。请参阅RESTful wiki以了解用法。

Kohana v3.x直接支持RESTful控制器。只需扩展Controller_REST而不是Controller,所有路由操作将成为请求方法。(例如,POST请求将针对action_post等)


从3.2版本开始,由于其不太符合RESTful规范,Controller_REST控制器已经从Kohana核心中移除。请参见:http://forum.kohanaframework.org/discussion/9004/kohana-rest-controller/p1 - eipark

3
你可以将以下代码添加到你的控制器的before()方法中:
if ($this->request->method() == "POST")
{
  $this->request->action("post_".$this->request->action());
}

所以GET /controller/posts将由您的控制器中的action_posts()方法处理,而POST /controller/posts将由action_post_posts()方法处理。

附注:Kohana 3.2中已删除内置的Controller_REST。


0

在类构造函数中检查HTTP方法对我来说似乎设计不佳。就像Rails一样,Kohana 3.3可以在路由器(它们应该在那里)中创建RESTful路由。

请查看Kohana 3.3路由过滤器的文档。

这是一个例子:

Route::set('Posts', 'posts/<id>', array('id' => '\d+'))
  ->filter(function($route, $params, $request) {
    $params['action'] = strtolower($request->method());
    return $params;
  })
  ->defaults(array(
    'controller' => 'Post',
  ));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接