質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

2回答

5509閲覧

CakePHP3の例外発生時にJSON出力させたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2016/09/02 09:30

CakePHP3のHTTP例外「BadRequestException」の発生時にJSON形式で出力させたい場合はどうすれば良いのでしょうか。
ApisControllerからは下記のようなJSON出力、それ以外のコントローラーからはHTMLでエラーを出力させたいと思っています。

json

1{ 2 "status": "error", 3 "message": "Bad Request" 4} 5

公式のCookBookを見たのですが、どのように実装するのか分からず...。
実装方法のヒントなどをご教示ください。

http://book.cakephp.org/3.0/ja/development/errors.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

try{}catch{}で例外を捕まえて、処理をすればよいかと思います

CakePHP

1//TestComponent.php 2 3use Cake\Controller\Component; 4use Cake\Network\Exception\BadRequestException; 5 6class TestComponent extends Component { 7 8 9 public function BadRequestError() { 10 throw new BadRequestException("TEST"); 11 } 12} 13 14// TestController.php 15 public function AjaxTest() { 16 try { 17 18 $this->dummy = $this->loadComponent('Test'); 19 20 $ret = $this->dummy->BadRequestError(); 21 22 $returnData = array('test'=>'test'); 23 24 $this->set('data',$returnData); 25 $this->set('_serialize', ['data']); 26 } 27 catch (\Exception $e) { 28 $exception_name = get_class($e); 29 30 if ($exception_name == 'Cake\Network\Exception\BadRequestException') { 31 $returnData = array('test'=>'exception!'); 32 33 $this->set('data',$returnData); 34 $this->set('_serialize', ['data']); 35 } 36 } 37 }

これで、Ajax経由でjsonのデータが受信できるところまでは、確認しています
課題:
例外をCatchしてBadRequestだけ処理をしているので、それ以外の例外が発生した場合に何も返さず、タイムアウトとなりますので、そこを対処する必要があります

投稿2016/09/02 12:22

KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考程度の情報ですが、別解として... ExceptionRendererを使ってうまく実装できるかもしれません。

ExceptionRendererは処理(catch)されなかったExceptionをエラー画面等で描画していますが、ここをうまく制御すればjsonを返すことができると思います。
http://book.cakephp.org/3.0/ja/development/errors.html#exceptionrenderer


追記

Cakephp3は内部でExcptionが発生した場合、リクエスト時のレスポンスのタイプ(jQueryのajaxのdataType等)に従って、レスポンスを返すようです。なので、レスポンスタイプに明示的にjsonを指定しておけば、exceptionの情報もjsonで受け取ることができます。

投稿2016/09/05 21:52

編集2016/10/13 05:05
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問