8

我正在探索一些 PHP 框架,目前的领跑者是 Kohana。

拥有 Rails 背景,我已经习惯了 rails 社区所称的“RESTful”路由。因此,“GET /posts”会显示所有帖子,并由 Posts Controller 的 index 方法处理。“POST /posts”创建一个新的 post 对象,并由 Posts Controller 的不同方法处理。

由于这两个请求中的路径相同,因此路由器需要根据 HTTP 方法做出决策。

Kohana 的路由器能做到这一点吗?

4

3 回答 3

8

Kohana 默认不支持 RESTful 路由,但是有一个RESTful模块添加了对它的支持。有关用法,请参阅RESTful wiki

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

于 2009-07-15T03:56:30.747 回答
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() 方法处理。

PS:内置的 Controller_REST 在 Kohana 3.2 中被移除

于 2011-08-19T00:08:24.990 回答
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',
  ));
于 2013-11-30T10:46:14.977 回答