API的Kohana路线 - 子目录,ID,格式

时间:2012-06-12 19:11:10

标签: api directory routes format kohana-3.2

我正在尝试在Kohana 3.2中创建一个匹配像

这样的URI的路由
api/article/get.json

api/article/get/123.xml

api/blogpost/post.json

api/user/get/username.json

所以我的想法是我有一个名为API的子目录,其中我有我所有的api控制器,路由匹配控制器,方法,格式,以及id和。

我在application/bootstrap.php

中设置了以下路径
Route::set('api', 'api/<controller>(/<action>(/<id>).<format>)',
  array(
    'format' => '(xhtml|xml|json|rss|html|php|serialize)',
  ))
  ->defaults(array(
    'directory' => 'api',
    'controller' => 'blogposts',
    'action' => 'get',
    'format' => 'json',
  ));

我玩过这条路线的多种组合,但每次收到以下网址时出现以下错误消息:localhost/api/blogposts/post.json

HTTP_Exception_404 [ 404 ]: The requested URL api/blogposts/post.php was not found on this server.

在我看来,这应该没问题,但我必须做错事。

非常感谢帮助。

Onema

修改

我的默认控制器设置为最后一个,我以为我会在SO中找到这篇文章时提到它 Kohana 3 route not matching

1 个答案:

答案 0 :(得分:0)

这可能是一个新的错误,但问题不在于路线,而是这里的类名是为什么:

我将控制器放在

application/classes/controller/api/bloposts.php

班级名称是

class Controller_Blogposts extends Controller {
  ...
}

在花了一些时间调试应用程序后,我发现问题不是路径,而是应该是类的名称

class Controller_Api_Blogposts extends Controller {
  ...
}

由于自动加载器会将路线api/blogposts.json映射到“ Controller_Api_Blogposts ”类。

在Kohana 3.2 Conventions and Coding Style中,他们有一个很好的表格,显示了类名是什么以及文件路径应该是什么:

Class name and corresponding file path in Kohana 3.2

我不确定路由映射与目录背后的技术性,但是如果路由映射到<directory>(在这种情况下是 api ),则可以安全地假设 api 位于“ application / classes / controller ”目录中。