2012-08-13 42 views
0

我想設置cakephp與JavaScriptMVC很好的工作(http://forum.javascriptmvc.com) 。 JavaScriptMVC需要在以下格式JSON-輸出:如何設置CakePHP 2.x的行爲像一個REST風格的web服務(與JavascriptMVC一起使用)

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

蛋糕將生成具有前置類名稱更深嵌套數組。我發現瞭解決這個問題的嘗試,但它們不適用於cakephp 2.x.我知道我可以簡單地通過php生成一個新的數組和json_encode(),但是包含一個像https://gist.github.com/1874366這樣的函數和另一個函數來解壓它會更好。 哪裏可以放置這些功能的最佳場所? AppController似乎不起作用。我應該把它放在控制器的beforeRender()或beforeFilter()嗎?或者有人甚至可能知道現有的解決方案/插件?在我目前的情況下,這對我來說是最好的,因爲我非常緊張。

回答

2

好吧,我不是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已經有了全面的REST服務支持,至少從Cake 1.2開始。您感興趣的庫是HttpSocket。至於json編碼和服務響應,Request Handling包括響應所有請求,內容類型,解碼和編碼json等方式。最後,內置的Set實用程序幾乎可以肯定涵蓋您需要的任何數組操作一兩行。

您感興趣的功能非常基礎,並沒有太多變化。我敢打賭,你已經發現的許多(相當簡單的)解決方案可能仍然有效,也許稍微調整一下。

對於幾乎任何基本的服務端點,您可能會創建一個控制器(而不是AppController - 這是應用程序範圍內的,因此您不能直接調用它)方法,因爲Cake將controller/action路由到您的url中:

蛋糕從不同的應用程序消耗服務應該是這樣的:

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

+0

非常感謝您回答我的問題。解釋我的不尋常的方法:它更多的是一個實際的準備工作(爲此我需要JavaScriptMVC)和做一份工作(爲此我需要蛋糕)的實踐性質。不要爲了我不得不承認的一個吝嗇。此外,JavaScriptMVC可以用作編程數據連接jQuery插件的工具。在這種情況下,我只是嘗試爲嵌套的圖像應用程序構建一個接口。 – 2012-08-15 00:01:06