CakePHP3でカスタムHTTPヘッダーを入れる
CakePHP3でヘッダーに特殊な値を入れるという、ニッチな情報が無かったのでまとめてみました。
この記事が必要な人、おめでとうございます、答えはここです、Maybe。
まずは正常系のヘッダーです。
これは意外と簡単で、AppController.php内のアクションに記載してあげるだけです。
1 2 3 4 5 6 7 8 9 10 11 12 |
class AppController extends Controller { public function invokeAction() { // カスタムHTTPヘッダー header('CustomHeader:123456'); parent::invokeAction(); } } |
このアクションでは 正常系 と Action内で発生させたException が対象です。
もちろん、JSONなどReaderを止めた処理でもヘッダーに値が入ります。
ただし、これでは正常系ではない物は通らず、ヘッダーにカスタム値が入らないことがあります。
では「正常系ではない=異常系」のものとはなんでしょうか?
それは PHPエラー と CakePHP本体のエラー です。
後者の具体例は 存在しないControllerやActionにアクセスした際 などです。
先ほどのはControllerまで到達していればすべてに入りますが、その前で処理が停止してしまう場合は当然ですが入りません。
これの対応をしましょう。
まず src/Error ディレクトリを作り CustomExceptionRenderer.php を作ります。
内容は下記のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace App\Error; use Exception; use Cake\Error\ExceptionRenderer; class CustomExceptionRenderer extends ExceptionRenderer { public function __construct(Exception $exception) { $exception->responseHeader('CustomHeader', 123456); parent::__construct($exception); } } |
続いて app.php のError.exceptionRenderer を書き換えます。
1 2 3 4 5 6 7 8 9 |
return [ 'Error' => [ 'exceptionRenderer' => 'App\Error\CustomExceptionRenderer', ], ]; |
これでControllerを通過しないExceptionやエラーが発生した際でも処理が通ります。
やったぜ!!!
「Error例外が発生した場合はMiddlewareを貫通してしまう」という問題については、v3.5.7以降は修正済みで現行バージョンでは 「ThrowableならMiddleware内でcatchされる」という挙動になっているそうです。
詳しくは下記のサイト様に詳細が記載されています。
【CakePHP3】例外がthrowされた時の処理を追ってみた – Qiita
- おすすめ記事
-
-
のえる2016.11.09
-
CakePHP3でPEARライブラリを使う方法
のえる2016.02.19 -
CakePHP3でURLの表記を変更する方法
のえる2016.02.08
-
POPULAR
のえる
Full-stack Developer