2011-12-08 31 views
1

我在關注設置RESTful Web服務的基礎知識的tutorial in the CakePHP book在CakePHP中使用RESTful API防止默認視圖

到目前爲止,我已經更新了我的路線文件到以下幾點:

Router::mapResources('stores'); 
Router::parseExtensions('json'); 

我也有安裝在應用程序/佈局/ JSON和適當的JSON視圖的空白布局。當我導航到控制器/ action.json時,我正在收到我的json輸出成功

我在想,雖然沒有.json擴展名,它會嘗試加載常規視圖。我正在尋找建立一個純粹的API只有JSON輸出,有沒有什麼辦法來防止定期渲染輸出呢?

回答

0

您目前在看什麼?如果您使用過烘焙蛋糕,您可能會爲您產生意見?

只是刪除意見/app/views/layout/app/views/controllername

如果你正試圖阻止請求擊中控制器都那麼我不敢肯定,你可以只更新您的.htaccess文件只發送請求以.json結尾的應用程序或類似的東西。

+0

我已經從這些位置刪除了視圖,我擁有的是我的json文件夾。但是當我在操作之後導航到沒有.json的控制器時,蛋糕會給我一個缺少的視圖錯誤。 – CrocHunter

+0

那麼你可以更新.htaccess,以便Apache只重寫匹配* .json – cowls

+0

的請求我曾考慮過,認爲如果您構建純api,Cake可能會鎖定它。 – CrocHunter

6

如果您可以另一種方式識別JSON請求,則可以強制渲染爲JSON。例如,如果接受HTTP頭中包含應用程序/ JSON,你可以把這個在你的控制器:

public function beforeFilter(){ 
    if ($this->request->accepts('application/json')) { 
     $this->RequestHandler->renderAs($this, 'json'); 
    } 
    parent::beforeFilter(); 
} 

這是CakePHP的2.0符號,但類似的事情可能存在CakePHP的1.2和1.3。

您也可以檢測請求Content-Type,或者也可以檢測請求,特別是如果不使用Accepts。

+1

Thx。我通過省略「if」並且只做到了這一點: $ this-> RequestHandler-> renderAs($ this,'json'); parent :: beforeFilter(); – sqren

0

這是我做的。

,如果我知道,我只建設JSON API,我加入到我的AppController.php如下:

public function beforeFilter() 
{ 
    if (empty($this->request->params['ext']) || $this->request->params['ext'] != "json") 
    { 
     $this->render(FALSE, 'maintenance'); //no view, only layout 
     $this->response->send(); 
     $this->_stop(); 
    } 
} 

,並在我的/app/Layouts/maintenance.ctp

echo __('Invalid extension'); 

這所有沒有json擴展名的請求都會在「維護」頁面結束,您可以在其中放置任何您想要的信息,我打算將其鏈接到API文檔。