CakePHP 3.x - 仅前缀中的扩展路由器
CakePHP 3.x - Extension router in prefix only
我正在开发一个应用程序,它有一个可供用户使用的端(仪表板)和一个后端端(API)。我希望 API 端有输出 JSON 的页面。多亏了 Cake,通过控制器的 $this->set('_serialize', [...]);
结合路由器设置,这变得很容易:Router::extensions(['json', 'xml']);
。我使用前缀路由对 API 页面进行分组。
问题:如何让扩展路由中的API页面只支持*.json
页面?
我尝试过的东西
- 显然,将
Router::extensions(['json', 'xml']);
行放在 routes.php 主作用域中可以使它在任何地方都有效。
将 Router::extensions(['json', 'xml']);
行放在前缀范围内...
Router::prefix('api', function ($routes) {
//...
Router::extensions(['json', 'xml']);
//...
});
...让它在 但在 API 前缀内的 处工作。
正在将其放入新范围...
Router::scope('/api', function ($routes) {
$routes->extensions(['json', 'xml']);
});
...也让它无处不在。
前缀也是范围,只是具有附加功能(它基本上是 scope()
的 shorthand 方法并传递 prefix
选项)。事实上,即使没有通过 scope()
方法显式连接,每条路线都有范围。
使用传递给 prefix()
方法回调的路由生成器,正如文档中的 scope()
示例和您的问题所示:
Router::prefix('api', function ($routes) {
$routes->extensions(['json']);
// ...
});
并确保不要在任何地方使用 Router::extensions(['json', 'xml']);
。
另见
我正在开发一个应用程序,它有一个可供用户使用的端(仪表板)和一个后端端(API)。我希望 API 端有输出 JSON 的页面。多亏了 Cake,通过控制器的 $this->set('_serialize', [...]);
结合路由器设置,这变得很容易:Router::extensions(['json', 'xml']);
。我使用前缀路由对 API 页面进行分组。
问题:如何让扩展路由中的API页面只支持*.json
页面?
我尝试过的东西
- 显然,将
Router::extensions(['json', 'xml']);
行放在 routes.php 主作用域中可以使它在任何地方都有效。 将
Router::extensions(['json', 'xml']);
行放在前缀范围内...Router::prefix('api', function ($routes) { //... Router::extensions(['json', 'xml']); //... });
...让它在 但在 API 前缀内的 处工作。
正在将其放入新范围...
Router::scope('/api', function ($routes) { $routes->extensions(['json', 'xml']); });
...也让它无处不在。
前缀也是范围,只是具有附加功能(它基本上是 scope()
的 shorthand 方法并传递 prefix
选项)。事实上,即使没有通过 scope()
方法显式连接,每条路线都有范围。
使用传递给 prefix()
方法回调的路由生成器,正如文档中的 scope()
示例和您的问题所示:
Router::prefix('api', function ($routes) {
$routes->extensions(['json']);
// ...
});
并确保不要在任何地方使用 Router::extensions(['json', 'xml']);
。
另见