2017-12-19 5 views
1

Laravel(5.5)はwhoopページではなくjson形式で例外を返すようです。この厄介な動作を無効にし、whoopsまたはデフォルトのPHP例外フォーマットをどこで受け取ることができますか?JSON例外を防ぐ方法

+0

存在しないページ(簡単なブラウザのGETリクエスト)にアクセスしてみてください。あなたはJSONで例外を取得しますか? .envに 'APP_DEBUG = true'があれば普通のWhoopsを取得するべきです。 JSONヘッダーを送信するときにJSONが返されると思います。 – devk

+0

@devkはい、質問に記載されているようにjsonを取得します。現在は 'APP_DEBUG = true'です。 jsonヘッダーの定期的な例外を受け取る必要があります。これが問題です。 – PHPst

答えて

1

JSONレスポンスを要求するリクエストを行うと、JSONレスポンスが返されます。次のヘッダーは、JSON応答をトリガー:

X-Requested-With: XMLHttpRequest 

OR

X-PJAX: true 

OR

Accept: */json or *+json 

あなたはこの標準の動作をしたくない場合は、あなたがapp/Exceptions/Handler.phpであなたの例外ハンドラを上書きすることができます。

/** 
* Render an exception into an HTTP response. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Exception $exception 
* @return \Illuminate\Http\Response 
*/ 
public function render($request, Exception $exception) 
{ 
    if (method_exists($e, 'render') && $response = $e->render($request)) { 
     return Router::toResponse($request, $response); 
    } elseif ($e instanceof Responsable) { 
     return $e->toResponse($request); 
    } 

    $e = $this->prepareException($e); 

    if ($e instanceof HttpResponseException) { 
     return $e->getResponse(); 
    } elseif ($e instanceof AuthenticationException) { 
     return $this->unauthenticated($request, $e); 
    } elseif ($e instanceof ValidationException) { 
     return $this->convertValidationExceptionToResponse($e, $request); 
    } 

    return $this->prepareResponse($request, $e); 
} 

それとも、あなたは返すしたいコンテンツの種類を決定するためにここに独自のロジックを追加

(これは vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.phpから直接コピーされ、常にリクエストヘッダを無視しておっとを返す)これに render機能を変更します異なるヘッダーが与えられたとき。

関連する問題