0

非常に優れたjavascriptMVC(http://forum.javascriptmvc.com)で動作するようにcakephpをセットアップしようとしています。JavaScriptMVC には、次の形式の JSON 出力が必要です。

[{
   'id': 1,
   'name' : 'Justin Meyer',
   'birthday': '1982-10-20'
},
{
   'id': 2,
   'name' : 'Brian Moschel',
   'birthday': '1983-11-10'
}]

Cake は、先頭にクラス名を追加して、より深くネストされた配列を生成します。問題を解決する試みを見つけましたが、cakephp 2.x 用ではありません。新しい配列を単純に生成し、それをphp経由でjson_encode()できることはわかっていますが、このhttps://gist.github.com/1874366のような関数と、それを解凍する別の関数を含める方がよいでしょう。そのような機能を配置するのに最適な場所はどこでしょうか? AppController が機能していないようです。コントローラーの beforeRender() や beforeFilter() に入れるべきでしょうか?または、誰かがこれに対する既存のソリューション/プラグインを知っているのでしょうか? 私はかなり時間に追われていたので、これは私の現在の状況では私にとって最善でしょう.

4

1 に答える 1

2

OK、あなたがやろうとしていることを 100% 理解しているとは思えないので、念のために言っておくと、Cake と JMVC はどちらも包括的な MVC フレームワークです。それらを単一のまとまりのあるプラットフォームとして組み合わせてアプリケーションを構築しようとしている場合は、アプローチ/プラットフォームなどを確認することを強くお勧めします.

また、私は決して jmvc の専門家ではないので、jmvc で Cake からの応答を処理することは、何らかの奇妙な理由で完全に問題外であるというふりをするつもりです。記録として、Cake の応答を次のように考えてみてください。

{ "Model" : 
    [{
    'id': 1,
    'name' : 'Justin Meyer',
    'birthday': '1982-10-20'
    },
    {
    'id': 2,
    'name' : 'Brian Moschel',
    'birthday': '1983-11-10'
    }]
 }

少なくとも Cake 1.2 以降、Cake は包括的な REST サービスをサポートしています。興味のあるライブラリはHttpSocketです。json エンコーディングと応答の提供に関しては、リクエスト処理は、とりわけ、あらゆる種類のリクエスト、コンテンツ タイプ、json のデコードとエンコードなどへの応答をカバーしています。最後に、組み込みのSetユーティリティは、必要な配列操作をほぼ確実にカバーします。一行か二行で。

あなたが興味を持っている機能はかなり基本的なもので、あまり変わっていません。あなたがすでに見つけた (かなり単純な) 解決策の多くは、おそらく少し調整するだけで、おそらくまだ機能するでしょう。

ほとんどすべての基本的なサービス エンドポイントでは、Cake がコントローラー/アクションを URL にルーティングすることを考慮して、おそらくコントローラー (AppController ではなく、アプリケーション全体のため、直接呼び出すことはできません) メソッドを作成します。

別のアプリからのケーキ消費サービスは次のようになります。

http://cakeproject/collect/getInfo

class CollectController extends AppController {

public function getInfo($array = null) {
    App::uses('HttpSocket', 'Network/Http'); 
    $http = new HttpSocket();
    $http->get('http://jmvcproject/controller/action', $array);
    // ...etc. 
} 

同じコントローラー/アクションから別のアプリにサービスを提供するケーキは、次のようになります。

public function getInfo($array = null) {
    $results = $this->Collect->find('all', $array);
    // ...fetch the results
} 

foreach($this->data as $data) { ...または、その配列をループしてクラス名を削除することもできます。ただし、データに関連するモデルなどが含まれる場合、Set はおそらく最も汎用性が高く回復力のあるソリューションです。

とにかくHTH

于 2012-08-14T02:43:35.107 に答える