0

よし、ここでのより良いタイトルは「CakePHP での REST によるプログレッシブ エンハンスメント」だったかもしれませんが、少なくとも今、あなたの答えが 2 つの違いに言及しているだけなら、あなたが質問を読んでいないことがわかります ;)

私は REST と、それを CakePHP と統合する方法にかなり精通していますが、従来どおり機能する Web サイトを維持する方法については 100% 理解していません。Router::mapResources を使用するのは素晴らしいアイデアのように思えますが、/resource/ への POST リクエストと /resource/add への GET リクエストの両方が同じアクションにルーティングされるため、サイトの「適切な劣化」バージョンの維持に問題が生じます。 (追加)。明らかに、REST API を使用している場合は、このアクションで JSON オブジェクトを返す必要がありますが、劣化したバージョンのサイト (おそらく JS を使用していない) を使用している場合は、追加フォームにする必要があります。

これに対処する最善の方法は何ですか。Router::resourceMap() を使用して REST リクエストを他のアクション名にルーティングしますか? api_action 関数を使用できるように、resourceMap の /api/ プレフィックス部分を使用するというクレイジーなハックを行いますか? isAjax() をチェックすることで、REST と従来のリクエストの両方を処理するアクションがありますか? もしそうなら、ブラウザーが他の 2 つの要求タイプを適切にサポートすることをどのように保証できますか?

私はかなり検索しましたが、従来のリクエストを REST と一緒に Cake で利用できるようにする方法については何も見つかりませんでした。アドバイスや経験があれば、ぜひ聞いてください!

4

1 に答える 1

0

CakePHP uses extension routing as well, via Router::parseExtension() so;

  • /test/action will render views/test/action.ctp
  • /test/action.html also
  • /test/action.json will render views/test/json/action.ctp
  • /test/action.xml will render views/test/xml/action.ctp

If all views are designed to handle the same data as set by your controller, you'll be able to show a regular HTML form and handle the posted data the same way as you'd handle the AJAX request.

You'll probably might have to add checks if any data is posted/submitted inside the /add, /edit, /delete actions to prevent items being deleted without a form being posted (haven't tested that though, it might be that cake blocks these urls if mapresources is set for the controller)

REST in CakePHP: http://book.cakephp.org/2.0/en/development/rest.html

(Extension) Routing http://book.cakephp.org/2.0/en/development/routing.html#file-extensions

于 2013-02-05T22:30:46.353 に答える