5

私は自分のURLをデザインするための最良の方法を見つけようとしています。これが私がこれまでに行ったことです:

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は、魔法をかけることで、すべてのブラウザーでこれら2つの方法をサポートしていることを読みました。

だから、Symfony2はrubyのようにPUTとDELETEを処理できるのだろうか?そして、RESTful URLを使用する必要がありますか?

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ができることやできないことではなく、「Restfulurl」が現在利用可能なブラウザでどのように処理されるかです...

一部のブラウザでは、一部のHTTPメソッド(putやdeleteなど)を使用できないため、適切な実装ではGET、POST、PUT、DELETE、およびPATCHを使用しますが、一部のユーザーでは問題が発生します:)

いつものように...ブラウザ...

于 2013-07-18T09:48:52.380 に答える