【发布时间】:2023-03-11 20:42:01
【问题描述】:
我目前正在使用 RestApi plugin for CakePHP 3,我希望能够将扩展名 .json 附加到 URL,如下所示:
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 时,我会得到abc.json。
我做错了吗?还是我应该从$term 中删除.json?
【问题讨论】:
-
实际使用配置扩展的路由在哪里?
-
你的意思是:
$routes->resources('Searches');? -
例如,是的……没有看到实际的路线,没有人能够判断出什么可能是错误的,或者至少能够排除可能的问题。您在问题中显示的路线 sn-p 不会做任何事情。
-
嗯,路由有 cakePHP 设置的默认路由,加上我添加的那段代码。我编辑了问题以获得完整的代码。
标签: json cakephp cakephp-3.0