Symfony2是否正确处理了restful url并且我应该使用restful url吗?

时间:2012-02-13 01:58:50

标签: php symfony url restful-url http-delete

我正在试图找出设计我的网址的最佳方式。 所以这就是我到目前为止所做的:

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吗?

3 个答案:

答案 0 :(得分:12)

是的,symfony2最终符合REST。

我不知道rails,但Symfony2使用不同的方式处理HTTP方法检测:

  • 首先从php
  • 获取REQUEST_METHOD
  • 然后if和only method == POST,从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,但是你会遇到一些用户的问题:)

一如既往......浏览器......