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

Jea*_*erc 5 php url restful-url symfony 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 }
Run Code Online (Sandbox Code Playgroud)

在测试了我所做的之后,我意识到更新和删除不起作用(总是调用account_read)...在谷歌搜索我的问题后,我发现所有浏览器都不支持PUT和DELETE方法......可能会在将来放弃.

然后我读到Ruby on rails通过做一些魔术在所有浏览器上支持这两种方法.

所以我想知道,Symfony2可以像ruby一样处理PUT和DELETE吗?我应该使用restful url吗?

Flo*_*ian 12

是的,symfony2最终符合RESTful标准.

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

  • 首先从php获取REQUEST_METHOD
  • 那么if和only method == POST,从X-HTTP-METHOD-OVERRIDE头部获取方法(回退到_method请求参数)

为什么这样做POST是因为除了GET或POST请求之外,浏览器不能发送任何其他内容.

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

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

  • 即使您的html包含`<form method ="DELETE">`,您的浏览器也永远不会发送DELETE请求.您可以使用`<form method ="POST"> <input type ="hidden"name ="_ method"value ="DELETE"/> </ form>来模拟这个 (9认同)