https://www.slimframework.com/docs/v3/handlers/error.html
地味に大事なあたり。
Default error handler
「デフォルトのエラーハンドラは非常に基本的です。 Responseステータスコードを500に設定し、Responseコンテンツタイプをtext / htmlに設定し、Response本体に汎用エラーメッセージを追加します。
これは、実稼動アプリケーションにはおそらく適切ではありません。 独自のSlimアプリケーションエラーハンドラを実装することを強くお勧めします。(機械翻訳)」。
うん身もふたもないw
「デフォルトのエラーハンドラには、詳細なエラー診断情報を含めることもできます。 これを有効にするには、displayErrorDetails設定をtrueに設定する必要があります。(機械翻訳)」ふむり。
これはデフォでtrueにしておいてもよいのやもしれぬ。
Custom error handler
ふむ……先に余談。
「A Slim Framework application's error handler is a Pimple service.」……Pimple service?
https://pimple.symfony.com/
これ、か。へぇ。
なんか「えらいことシンプルでお好み」だと思ったんだが、ここだけ切り出されてるのか。興味深い。
んで、本題。
「There are two ways to inject handlers:」ほぉ。
$c = new \Slim\Container(); $c['errorHandler'] = function ($c) { return function ($request, $response, $exception) use ($c) { return $c['response']->withStatus(500) ->withHeader('Content-Type', 'text/html') ->write('Something went wrong!'); }; }; $app = new \Slim\App($c);
$app = new \Slim\App(); $c = $app->getContainer(); $c['errorHandler'] = function ($c) { return function ($request, $response, $exception) use ($c) { return $c['response']->withStatus(500) ->withHeader('Content-Type', 'text/html') ->write('Something went wrong!'); }; };
あんま変わらんw
どっちかってぇと。writeのところのコンテンツを「テンプレートエンジン側で用意した、デフォルトのテンプレートにすり替える」とか、なんだろうなぁ。実際の実装時は。
Class-based error handler
うんまぁこれも。ようは「無名関数返す」か「__invoke()が実装されたクラスインスタンスを返すか」なので、中身的にはあんまり変わらん。
Handling other errors
ふむ……ようは
・notAllowedHandler https://www.slimframework.com/docs/v3/handlers/not-allowed.html :ルーティングで、URIはあったけどmethodがマッチしなかったよ!
・notFoundHandler https://www.slimframework.com/docs/v3/handlers/not-found.html :ルーティングにマッチしなかったよ!
・phpErrorHandler https://www.slimframework.com/docs/v3/handlers/php-error.html :PHP7以降のランタイムエラー
・SlimExceptionは補足できないよ
・上述以外は errorHandler
って感じだねぇ。
Disabling
やらないと思うw
ふむ、シンプルに片付いた。
まぁとりあえず「errorHandlerはmust & 念のために"本番用"もちゃんと用意しよう」ってのと。
それ以外については「ざっくりと"本番用"を用意」しておくとよい、のかなぁ。
まぁ場所は把握できたので、あとは必要に応じて。