2011-12-08 8 views
1

私はtutorial in the CakePHP bookに続き、RESTful Webサービスの設定の基本について説明しています。CakePHPでRESTful APIを使用してデフォルトビューを表示しない

はこれまでのところ、私は次のように私のルートファイルを更新しました:

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

私はアプリ/レイアウト/ JSONと適切なJSON形式のビューでセットアップ空白のレイアウトをも持っています。コントローラー/ action.jsonに移動するとjson出力が正常に受信されます

私はjson拡張機能を使用せずに通常のビューをロードしようとしています。私はjsonの出力だけで純粋なAPIを構築しようとしていますが、代わりに通常のレンダリングの出力を妨げる方法はありますか?

答えて

0

あなたは現在何を見ていますか?あなたがベーキングを使用している場合は、ケーキがあなたのためのビューを生成している可能性があります?

だけ/app/views/layoutでビューを削除し、/app/views/controllername

あなたは、私はとてもよく分からない全くのコントローラを打つからの要求を防ぐためにしようとしている場合は、あなただけの要求だけを送信するために、あなたの.htaccessファイルを更新でき.jsonで終わるアプリやそれに類するもの。

+0

これらの場所のそれぞれからビューを削除しました。私が持っているものはすべてjsonフォルダです。しかし、ケーキは、アクションの後に.jsonなしのコントローラに移動すると、私に見逃しのビューエラーを与えます。 – CrocHunter

+0

まあ、あなたは.htaccessを更新することができるので、apacheは* .jsonに一致するリクエストだけを書き換えます。 – cowls

+0

私はこれを考慮しました.Cakeはあなたが純粋なAPIを構築するなら、それをロックする方法を持っているかもしれないと考えました。 – 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を使用しない場合は、Content-Typeを検出することもできます。

+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'); 

この私はあなたが望む情報を置くことができる "メンテナンス"ページに終わるでしょう、私はそこにAPIのドキュメントへのリンクを置くつもりです。

関連する問題