CakePHP 3.x - 仅在前缀中的扩展路由器
Posted
技术标签:
【中文标题】CakePHP 3.x - 仅在前缀中的扩展路由器【英文标题】:CakePHP 3.x - Extension router in prefix only 【发布时间】:2017-04-08 18:36:35 【问题描述】:我正在开发一个应用程序,该应用程序具有可供用户使用的一侧(仪表板)和一个后端(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']);
);
...也让它无处不在。
【问题讨论】:
你读过book.cakephp.org/3.0/en/development/…吗? 是的,我已经阅读了文档。 【参考方案1】:前缀也是范围,只是具有附加功能(它基本上是scope()
的简写方法并传递prefix
选项)。事实上,即使没有通过scope()
方法显式连接,每条路由都是有作用域的。
使用传递给prefix()
方法的回调的路由构建器,正如文档中的scope()
示例和您的问题所示:
Router::prefix('api', function ($routes)
$routes->extensions(['json']);
// ...
);
并确保不要在任何地方使用Router::extensions(['json', 'xml']);
。
另见
Cookbook > Routes > Routing File Extensions【讨论】:
啊,成功了。我犯的错误是使用Router::extensions(['json', 'xml']);
而不是$routes->extensions(['json', 'xml']);
以上是关于CakePHP 3.x - 仅在前缀中的扩展路由器的主要内容,如果未能解决你的问题,请参考以下文章