我正在尝试在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
答案 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中,他们有一个很好的表格,显示了类名是什么以及文件路径应该是什么:
我不确定路由映射与目录背后的技术性,但是如果路由映射到<directory>
(在这种情况下是 api ),则可以安全地假设 api 位于“ application / classes / controller ”目录中。