代码之家  ›  专栏  ›  技术社区  ›  James Healy

我可以在Kohana设置路由以仅匹配特定的HTTP方法(get/post/etc)吗?

  •  8
  • James Healy  · 技术社区  · 15 年前

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

    有了Rails的背景,我已经习惯了Rails社区所说的“休息”路线。因此,“get/posts”显示所有的post,并由posts控制器的index方法处理。“post/posts”创建一个新的post对象,并由posts控制器的不同方法处理。

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

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

    3 回复  |  直到 11 年前
        1
  •  8
  •   shadowhand    15 年前

    Kohana默认不支持RESTful路由,但 RESTful 为其添加支持的模块。见 RESTful wiki 供使用。

    Kohanav3.x直接支持RESTful控制器。只是延伸 Controller_REST 而不是 Controller 所有路由操作都将是请求方法。(A) POST 请求的目标是 action_post 等)

        2
  •  2
  •   flammel    13 年前

    还可以将这些行添加到控制器的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:在Kohana 3.2中移除了内置控制器_rest。

        3
  •  0
  •   Jezen Thomas    11 年前

    在类构造函数中检查HTTP方法对我来说是一种糟糕的设计。和Rails一样,Kohana3.3可以在路由器中创建安静的路由(它们所属的位置)。

    查看文档 Kohana 3.3 Route Filters .

    这里是一个例子:

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