2012-02-13 38 views
5

我想知道什麼是設計我的網站的最佳方式。 所以這是我迄今所做的: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嗎?

回答

12

是的,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

3

如果您打算實施RESTful服務,您可以查看RestBundle。他們已經有了相當不錯的網址命名約定,你可能會同意,還有很多其他的事情可以簡化開發過程。

是的,Symfony2可以處理PUT和DELETE請求。

1

點是不是Symfony的可以做或不可以,關鍵是如何「平安網址」結合現有的瀏覽器在處理......

有些瀏覽器不會允許你使用一些HTTP方法(如放或刪除),所以是的,一個很好的實現將使用GET,POST,PUT,DELETE和補丁,但你會得到的問題與一些用戶:)

像往常一樣... ...瀏覽器