gpt4 book ai didi

rest - 在 CakePHP 中使用带有 RESTful 路由的路由前缀

转载 作者:行者123 更新时间:2023-12-04 18:22:57 27 4
gpt4 key购买 nike

致力于构建 API 并希望使用 RESTful routes .

我让它像这样工作得很好:

http://www.mysite.com/events.json  // returns json results with my events
http://www.mysite.com/events/123.json // returns json results with event of id '123'

但是 - 我希望能够使用“api”前缀来执行此操作。

所以,我添加了 api 路由前缀:

Configure::write('Routing.prefixes', array('admin', 'api'));

并将我的操作从“view”和“index”更改为“api_view”和“api_index”。

但是现在不行了。 (例如,我必须写下操作名称,否则它不会根据 HTTP 找到正确的名称。

最终目标是能够做这样的事情:

GET http://www.mysite.com/api/1.0/events.json // loads events/api_index()
GET http://www.mysite.com/api/1.0/events/123.json // loads events/api_view($id)
DELETE http://www.mysite.com/api/1.0/events/123.json // loads events/api_delete($id)
...etc

最佳答案

我最终不得不手动编写路由:

Router::parseExtensions('json', 'xml');

Router::connect('/api/:version/:controller/:id/*',
array('[method]'=>'GET', 'prefix'=>'api', 'action'=>'view'),
array('version'=>'[0-9]+\.[0-9]+', 'id'=>'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}'));

Router::connect('/api/:version/:controller/*',
array('[method]'=>'GET', 'prefix'=>'api', 'action'=>'index'),
array('version'=>'[0-9]+\.[0-9]+'));

Router::connect('/api/*', array('controller'=>'events', 'action'=>'index', 'ext'=>'html'));

注意事项:

[method] 强制使用 HTTP 类型(例如 RESTful)

parseExtensions() 让您可以通过更改 URL 中的扩展名自动显示不同格式的数据。

最后的 Router::行只是一个包罗万象的/api/不匹配的东西 - 它将它转发到主页。最终我可能会将其路由到 API 错误页面。

最后一个 Router::行的 'ext'=>'html' 是为了防止 parseExtensions 尝试使用 URL 中的任何扩展名——如果它因为调用的原因而重定向错了,我只是想让它返回主页(或其他)并使用普通 View 。

关于rest - 在 CakePHP 中使用带有 RESTful 路由的路由前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20601162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com