2017-05-04 9 views
0

私はcakephpでrestfull APIをやっています... そしていつか例外をスローします。私のURLが/コントローラ/アクションの場合は、JSON形式でcakephpのJSON例外3

{ 
message: "The requested resource does not support http method GET", 
url: "/api/auth/users/authenticate.json", 
code: 405 
} 

が、たとえば:

if (!$this->request->is('post')) { 
      throw new MethodNotAllowedException("The requested resource does not support http method " . $this->request->param('_method')); 
     } 

私の問題は、URLが応答がある/controller/action.jsonあるとき​​です。私の応答はHTMLです。私はこれらの例外を.jsonをURLに入れずに常にjsonにすることが可能かどうかを知りたいのです。

ありがとうございます!

+0

レスポンス・ヘッダに 'アプリケーション/ json'を指定することができる(beforeRenderに)コントローラ/ ErrorController.phpにに添加JSONにレンダリングされます。 – TheDude

+0

'$ this-> RequestHandler-> renderAs($ this、 'json');' –

+0

を使用して、例外をスローする前にコントローラーのアクションに追加できます。ただし、成功なし...例外はレンダリングされますHTMLとして... – jaloise

答えて

0

次の操作を行います。ノートに示唆されているとおり。

if (!$this->request->is('post')) { 
    $this->RequestHandler->renderAs($this, 'json'); 
    throw new MethodNotAllowedException("The requested resource does not support http method " . $this->request->param('_method')); 
} 

この機能を使用するには、コンポーネントも必要です。あなたは例外を強制することができ

public function initialize() { 
    parent::initialize(); 
    $this->loadComponent('RequestHandler'); 
} 
+0

はい、私は私のコントローラでそれを行います...しかし、まだHTMLとしてレンダリングされています...私は理由を知らない... – jaloise

+0

@ jaloise悪い私が信じるように私が家に帰るときにもう少し試してみてください私は以前これが働いていた。また、エラーをスローしてCakeに処理させる代わりに、応答オブジェクトを直接 '$ this-> response'に書くこともできます。 – KaffineAddict

+0

私はそれを成功させることなく試みます。 – jaloise

0

は常に

$this->RequestHandler->renderAs($this, 'json');