我目前正在使用RestApi plugin for CakePHP 3,我希望能够将扩展程序.json
附加到网址,如下所示:
domain.com/api/search/abc.json
关于CakePHP关于creating RESTful routes的文档,我能够使用扩展而不会抛出错误。
我在routes.php上有这个(编辑添加整个代码)
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;
Router::defaultRouteClass(DashedRoute::class);
Router::scope('/', function (RouteBuilder $routes) {
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
$routes->fallbacks(DashedRoute::class);
});
Plugin::routes();
Router::scope('/', function ($routes) {
$routes->extensions(['json']);
});
在我的控制器中,如果我这样做:
public function search($term=''){
$this->httpStatusCode = 200;
$this->apiResponse['term'] = $term;
}
回复是:
{
"status": "OK",
"result": {
"term": "abc.json" # Notice the .json
}
}
所以,当我需要abc.json
时,我会abc
。
我做错了吗?或者我应该从.json
剥离$term
?
答案 0 :(得分:2)
虽然重用现有范围会将连接的路由合并到相同的路由集合,但对RouteBuilder::extensions()
的调用通常不会影响以前连接的路由,并且它们也不会影响重用/重新打开的范围。
来自文档的引用:
通过此构建器连接的未来路由将具有连接 应用扩展。但是,设置扩展名不会修改现有路由。
<强> API > \Cake\Routing\RouteBuilder::extensions() 强>
您应该在现有路由范围中添加extensions()
调用,以便在 extensions()
调用之后影响中连接的路由。
另见