CakePHP路由json响应

时间:2017-03-12 17:09:23

标签: json cakephp cakephp-3.0

我目前正在使用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

1 个答案:

答案 0 :(得分:2)

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

来自文档的引用:

  

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

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

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

另见