CakePHP3でカスタムHTTPヘッダーを入れる

のえる のえる
2020.06.05

CakePHP3でヘッダーに特殊な値を入れるという、ニッチな情報が無かったのでまとめてみました。

 

この記事が必要な人、おめでとうございます、答えはここです、Maybe。

 

 

まずは正常系のヘッダーです。
これは意外と簡単で、AppController.php内のアクションに記載してあげるだけです。

 

 

このアクションでは 正常系Action内で発生させたException が対象です。
もちろん、JSONなどReaderを止めた処理でもヘッダーに値が入ります。

 

ただし、これでは正常系ではない物は通らず、ヘッダーにカスタム値が入らないことがあります。
では「正常系ではない=異常系」のものとはなんでしょうか?

 

それは PHPエラーCakePHP本体のエラー です。
後者の具体例は 存在しないControllerやActionにアクセスした際 などです。

 

先ほどのはControllerまで到達していればすべてに入りますが、その前で処理が停止してしまう場合は当然ですが入りません。
これの対応をしましょう。

 

まず src/Error ディレクトリを作り CustomExceptionRenderer.php を作ります。
内容は下記のとおりです。

 

 

続いて app.php のError.exceptionRenderer を書き換えます。

 

 

これでControllerを通過しないExceptionやエラーが発生した際でも処理が通ります。

 

やったぜ!!!

 

補足

「Error例外が発生した場合はMiddlewareを貫通してしまう」という問題については、v3.5.7以降は修正済みで現行バージョンでは 「ThrowableならMiddleware内でcatchされる」という挙動になっているそうです。
詳しくは下記のサイト様に詳細が記載されています。
 
【CakePHP3】例外がthrowされた時の処理を追ってみた – Qiita

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer