5

我试图弄清楚设计我的网址的最佳方式是什么。所以这是我到目前为止所做的:

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 吗?并且我应该使用宁静的网址吗?

4

3 回答 3

12

是的,symfony2 绝对是 RESTful 兼容的。

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

  • 首先从php获取 REQUEST_METHOD
  • 然后当且仅方法 == POST,从X-HTTP-METHOD-OVERRIDE标头获取方法(回退到_method请求参数)

为什么它会检查POST是因为浏览器只能发送 GET 或 POST 请求。

与 rails 和/或 symfony1 的不同之处在于没有帮助程序来生成具有相应方法的链接或表单。您可以为您的应用程序生成有效请求。

PS:关于你的路由,你应该把你的要求写在大写的_method上。

于 2012-02-13T14:18:10.877 回答
3

如果你打算实现 RESTful 服务,你可以看看RestBundle。他们已经有很好的 url 命名约定,你可能会同意,还有许多其他可以简化开发过程的东西。

是的,Symfony2 可以处理 PUT 和 DELETE 请求。

于 2012-02-13T14:39:29.330 回答
1

关键不是 Symfony 能做什么或不能做什么,关键是“Restful url”如何处理当前可用的浏览器......

某些浏览器不允许您使用某些 HTTP 方法(例如 put 或 delete),所以是的,一个好的实现将使用 GET、POST、PUT、DELETE 和 PATCH,但您会遇到一些用户的问题 :)

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

于 2013-07-18T09:48:52.380 回答