私はCakePHPアプリケーションを最も再利用可能な方法で開発します。これをWebサービスとして扱いたいので、コントローラーをビューに厳密にバインドしたくありません。私の考えは、コントローラーがjson情報を返すだけで、ビューがコントローラーを呼び出してjsonを取得し、html出力を作成することです。
どうすればそれを実現できますか?ビューではなくページを開発するのに適したアプローチである可能性があり、そのページ内で以前に開発されたWebサービスを呼び出します。
私はCakePHPアプリケーションを最も再利用可能な方法で開発します。これをWebサービスとして扱いたいので、コントローラーをビューに厳密にバインドしたくありません。私の考えは、コントローラーがjson情報を返すだけで、ビューがコントローラーを呼び出してjsonを取得し、html出力を作成することです。
どうすればそれを実現できますか?ビューではなくページを開発するのに適したアプローチである可能性があり、そのページ内で以前に開発されたWebサービスを呼び出します。
$ this-> set('_ serialize'、array('people'));を使用して、ビューファイルを作成することを忘れることもできます。PeopleController :: show()で
さて、ケーキはちょっとこの「箱から出して」のような作品です。を使用Router::parseExtensions();
して、提供するデータのタイプを定義できます。たとえばapp/Config/routes.php
:
Router::parseExtensions('xml','json');
これにより、どのような種類のリクエストが着信しているかを検出できるようになります。たとえば、誰かが次のことを要求した場合:
www.example.com/people/list.json
またはwww.example.com/people/list.xml
、PeopleControllerのlist()メソッドで、要求されているリソースの種類(jsonまたはxml、またはもちろん、定義したその他の拡張機能)を検出できます。これは、RequestHandlerComponentが使用される目的です。たとえば、xmlかどうかを確認できます。
if($this->RequestHandler->isXml()) {
//Some code
}
異なる拡張子はデータの異なる表現にすぎないため、正確に何を提供しているかは問題ではありません。v2.1以降、CakeはJSONまたはXMLリクエストを検出すると、ビュークラスを自動的に切り替えます。これにより、新しいJSONおよびXMLビューに移動します。
あなたがしなければならないのは、適切な場所でビューを提供することです。
(View/People
この例の場合)次のようになります。
..View/People/
list.ctp
xml/
list.ctp - XML view
json/
list.ctp - JSON view