0

我正在尝试在 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.

在我看来,这应该没问题,但我一定做错了什么。

帮助表示赞赏。

梦间

编辑

我的默认控制器设置为最后一个,只是想我会提到它,因为我在 SO Kohana 3 route not matching中发现这篇文章

4

1 回答 1

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中,他们有一个很好的表格,显示类名是什么以及文件路径应该是什么:

Kohana 3.2 中的类名和对应的文件路径

我不确定 100% 使用目录进行路由映射背后的技术细节,但如果路由映射到 a <directory>(在本例中为api),则可以安全地假设api位于“ application/classes/controller ”目录中。

于 2012-06-13T18:17:13.087 回答