Symfony2是否可以正确处理宁静的网址,并且应该使用宁静的网址?

问题描述:

我想知道什么是设计我的网站的最佳方式。 所以这是我迄今所做的:Symfony2是否可以正确处理宁静的网址,并且应该使用宁静的网址?

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可以处理像红宝石一样的PUT和DELETE吗? AND 我应该使用restful url吗?

是的,symfony2明确地是RESTful兼容。

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

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

为什么它使在POST这赤是因为浏览器无法发送不外乎GET或POST请求。

与rails和/或symfony1不同的地方在于没有帮助用相应的方法生成链接或表单。您需要为您的应用程序生成有效的请求。

PS:关于你的路由,你应该在_method中将你的需求写在大写中。

+0

你有一个想法,为什么Symfony执行account_read而不是account_delete,即使我的表单方法是“DELETE”? – 2012-02-13 15:06:04

+9

即使您的html包含'

',您的浏览器也不会发送DELETE请求。你可以使用'
' – Florian 2012-02-13 15:34:34

如果您打算实施RESTful服务,您可以查看RestBundle。他们已经有了相当不错的网址命名约定,你可能会同意,还有很多其他的事情可以简化开发过程。

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

点是不是Symfony的可以做或不可以,关键是如何“平安网址”结合现有的浏览器在处理......

有些浏览器不会允许你使用一些HTTP方法(如放或删除),所以是的,一个很好的实现将使用GET,POST,PUT,DELETE和补丁,但你会得到的问题与一些用户:)

像往常一样... ...浏览器