このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
apricot:app:error [2020/05/09 16:04] y2sunlight [HTMLテンプレート] |
apricot:app:error [2020/07/01 13:34] (現在) tanaka [集約例外コントローラ] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== Apricot | + | ====== Apricot |
- | --- // | + | --- // |
[[apricot: | [[apricot: | ||
行 11: | 行 11: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * Apricot エラー画面 |
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
- | \\ | + | アプリのエラー画面を作ります。\\ |
- | + | エラー画面は集約例外ハンドラー([[basic-library: | |
- | アプリのエラー画面を作ります。エラー画面は集約例外ハンドラー([[basic-library: | + | |
---- | ---- | ||
行 44: | 行 43: | ||
* debug --- デバッグモード(既定値は 環境変数APP_DEBUGの値) | * debug --- デバッグモード(既定値は 環境変数APP_DEBUGの値) | ||
- | * controller --- 本番用エラー画面のコントローラクラス(後述) | + | * controller --- 本番用エラー画面のコントローラクラス |
- | * action --- 本番用エラー画面のアクションメソッド(後述) | + | * action --- 本番用エラー画面のアクションメソッド |
\\ | \\ | ||
行 51: | 行 50: | ||
===== 集約例外コントローラ ===== | ===== 集約例外コントローラ ===== | ||
- | > TODO: | + | |
+ | 集約例外ハンドラーから呼び出されるコントローラを集約例外コントローラと呼びます。whoops.setting.php での設定に従い UncaughtExceptionHandler@render メソッドが実行されてエラー画面を表示します。以下に集約例外コントローラを示します。 | ||
{{fa> | {{fa> | ||
行 85: | 行 85: | ||
// エラー画面を表示する | // エラー画面を表示する | ||
- | | + | render(' |
} | } | ||
} | } | ||
</ | </ | ||
+ | |||
+ | * 例外の種類に応じて表示用のステータスコードを設定します。 | ||
+ | * CSRFエラーなどの TokenMismatchException( トークンエラー )は419( Page Expired )に設定 | ||
+ | * HttpException( ヘルパー関数 '' | ||
+ | * その他の例外は 500( Internal Server Error )に設定 | ||
+ | |||
+ | * ヘルパー関数 render() を呼び出してレスポンスをレンダリングしています | ||
+ | * **render(string $view=null, array $variables=[])** | ||
+ | - $view : テンプレート名\\ 上例では assets/ | ||
+ | - $variables : テンプレート変数の連想配列\\ 上例では $status_codeをテンプレートに渡しています。 | ||
+ | * commit()メソッドはレンダリングされたHTMLを確定してレスポンスを送信します | ||
\\ | \\ | ||
+ | |||
+ | |||
===== HTMLテンプレート ===== | ===== HTMLテンプレート ===== | ||
行 101: | 行 114: | ||
テンプレート error.exception は、error.layout から継承して作成します。 | テンプレート error.exception は、error.layout から継承して作成します。 | ||
- | \\ | ||
==== error.layout ==== | ==== error.layout ==== | ||
行 174: | 行 186: | ||
</ | </ | ||
</ | </ | ||
- | |||
- | \\ | ||
==== error.exception ==== | ==== error.exception ==== | ||
- | 以下に集約例外コントローラのrenderアクションでレンダリングしているHTMLテンプレート( error.exception )を示します。 | + | 以下に集約例外コントローラでレンダリングしているHTMLテンプレート( error.exception )を示します。 |
{{fa> | {{fa> | ||
行 234: | 行 244: | ||
===== テスト実行 ===== | ===== テスト実行 ===== | ||
- | > TODO: | + | |
+ | エラー画面を表示してみましょう。 | ||
+ | |||
+ | .envを以下のように修正してデバッグモードから本番モードに変更します。 | ||
+ | > デバッグモードの時は集約エラーハンドラーは実行されません(その代わりに Whoops提供のPrettyErrorHandlerのデバッグ画面が表示されます )。 | ||
+ | |||
+ | {{fa> | ||
+ | <code int .env> | ||
+ | ... | ||
+ | APP_DEBUG=false | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ブラウザ上で以下のURLにアクセスしてみて下さい。 | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | 次の画面が表示されます | ||
+ | [{{apricot: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | テスト後は、.envを元に戻しておいて下さい。 | ||
+ | <code int .env> | ||
+ | ... | ||
+ | APP_DEBUG=true | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | \\ | ||