我正在试图找出设计我的网址的最佳方式。 所以这就是我到目前为止所做的:
account_index:
pattern: /Accounts/
defaults: { _controller: "CoreBundle:Account:index" }
requirements: { _method: get }
account_create:
pattern: /Accounts/
defaults: { _controller: "CoreBundle:Account:create" }
requirements: { _method: post }
account_read:
pattern: /Accounts/{id}
defaults: { _controller: "CoreBundle:Account:show" }
requirements: { _method: get }
account_update:
pattern: /Accounts/{id}
defaults: { _controller: "CoreBundle:Account:update" }
requirements: { _method: put }
account_delete:
pattern: /Accounts/{id}
defaults: { _controller: "CoreBundle:Account:delete" }
requirements: { _method: delete }
在测试了我所做的事情之后,我意识到更新和删除不起作用(总是调用account_read)...在搜索我的问题后,我发现所有浏览器都不支持PUT和DELETE方法。 ..并且可能在将来放弃。
然后我读到Ruby on rails通过做一些魔术在所有浏览器上支持这两种方法。
所以我想知道,Symfony2可以像ruby一样处理PUT和DELETE吗? 和 我应该使用restful url吗?
答案 0 :(得分:12)
是的,symfony2最终符合REST。
我不知道rails,但Symfony2使用不同的方式处理HTTP方法检测:
X-HTTP-METHOD-OVERRIDE
标题获取方法(回退到_method
请求参数)为什么它会导致POST
上的这个问题是因为除了GET或POST请求之外,浏览器不能发送任何其他内容。
与rails和/或symfony1的不同之处在于没有帮助器可以使用相应的方法生成链接或表单。由您来为您的应用程序生成有效请求。
PS:关于你的路由,你应该在大写的_method上写下你的要求。
答案 1 :(得分:3)
如果您计划实施RESTful服务,可以查看RestBundle。他们已经拥有了很好的网址命名约定,你可能会同意这些约定,以及许多其他可以简化开发过程的事情。
是的,Symfony2可以处理PUT和DELETE请求。
答案 2 :(得分:1)
关键不在于Symfony能做什么或不能做什么,关键是“Restful url”如何处理当前可用的浏览器......
有些浏览器不允许你使用某些HTTP方法(比如put或delete),所以是的,一个好的实现将使用GET,POST,PUT,DELETE和PATCH,但是你会遇到一些用户的问题:)
一如既往......浏览器......