Routing CakePHP 3.x-仅前缀中的扩展路由器

Routing CakePHP 3.x-仅前缀中的扩展路由器,routing,cakephp-3.0,prefix,Routing,Cakephp 3.0,Prefix,我正在开发一个应用程序,它有一个可供用户使用的端(仪表板)和一个后端(API)。我希望API端有输出JSON的页面。多亏了Cake,使用$this->set(“\u serialize',[…])可以轻松实现这一点与路由器设置相结合:router::extensions(['json','xml'])。我使用前缀路由对API页面进行分组 问题:如何使API页面仅支持扩展路由器的*.json页面? 我试过的东西 放置Router::extensions(['json','xml'])line使它

我正在开发一个应用程序,它有一个可供用户使用的端(仪表板)和一个后端(API)。我希望API端有输出JSON的页面。多亏了Cake,使用
$this->set(“\u serialize',[…])可以轻松实现这一点与路由器设置相结合:
router::extensions(['json','xml'])。我使用前缀路由对API页面进行分组

问题:如何使API页面仅支持扩展路由器的
*.json
页面?

我试过的东西

  • 放置
    Router::extensions(['json','xml'])line使它在任何地方都能工作
  • 放置
    Router::extensions(['json','xml'])前缀范围内的行

    Router::prefix('api', function ($routes) {
         //...
         Router::extensions(['json', 'xml']);
         //...
    });
    
    …使其在任何地方都能工作,但不在API前缀内

  • 把它放在一个新的范围内

    Router::scope('/api', function ($routes) {
       $routes->extensions(['json', 'xml']);
    });
    
    …也使它在任何地方都能工作


前缀也是作用域,只是有额外的功能(它基本上是
scope()
和传递
前缀
选项的简写方法)。事实上,每个路由都有作用域,即使没有通过
scope()
方法显式连接

使用传递给回调函数的
prefix()
方法的routes builder,如文档和您的问题中的
scope()
示例所示:

Router::prefix('api', function ($routes) {
    $routes->extensions(['json']);
    // ...
});
并确保不使用
Router::extensions(['json','xml'])任何地方

另见


你读过吗?是的,我读过文档。啊,这就成功了。我犯的错误是使用
Router::extensions(['json','xml'])而不是
$routes->extensions(['json','xml'])