【问题标题】:CakePHP Routing json responseCakePHP 路由 json 响应
【发布时间】: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


【解决方案1】:

虽然重用现有范围会将连接的路由合并到同一路由集合,但对 RouteBuilder::extensions() 的调用通常不会影响以前连接的路由,它们也不影响重用/重新打开的范围。

引用自文档:

通过此构建器连接的未来路线将连接 应用了扩展。但是,设置扩展并不会修改现有路由。

API > \Cake\Routing\RouteBuilder::extensions()

您应该在现有路由范围中添加extensions() 调用,以便它影响在extensions() 调用之后 中正在连接的路由。

另见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    相关资源
    最近更新 更多