Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:app:error

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:app:error [2020/05/09 16:04]
y2sunlight [HTMLテンプレート]
apricot:app:error [2020/07/01 13:34] (現在)
tanaka [集約例外コントローラ]
行 1: 行 1:
-====== Apricot アプリ作成の準備 ====== +====== Apricot エラー画面 ====== 
- --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-06//+ --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-05-09//
  
 [[apricot:top|Apricot に戻る]] [[apricot:top|Apricot に戻る]]
行 11: 行 11:
     * [[apricot:app:top|Apricot アプリ作成の準備]]     * [[apricot:app:top|Apricot アプリ作成の準備]]
     * [[apricot:app:home|Apricot ホーム画面]]     * [[apricot:app:home|Apricot ホーム画面]]
-    * [[apricot:app:error|Apricot エラー画面]]+    * Apricot エラー画面
     * [[apricot:app:db-model|Apricot データベースとモデル]]     * [[apricot:app:db-model|Apricot データベースとモデル]]
     * [[apricot:app:user-list|Apricot ユーザ一覧画面]]     * [[apricot:app:user-list|Apricot ユーザ一覧画面]]
-    * [[apricot:app:user-edit|Apricot ユーザ編集画面]]+    * [[apricot:app:user-edit|Apricot ユーザ登録画面]]
     * [[apricot:app:validation|Apricot バリデーション]]     * [[apricot:app:validation|Apricot バリデーション]]
     * [[apricot:app:transaction|Apricot トランザクション]]     * [[apricot:app:transaction|Apricot トランザクション]]
-  * [[apricot:ext:top|Apricot 拡張]]+  * [[apricot:ext:middleware|Apricot 拡張]]
  
-\\ +アプリのエラー画面を作ります。\\  
- +エラー画面は集約例外ハンドラー([[basic-library:whoops:2.7|Whoops]])から呼び出されます。
-アプリのエラー画面を作ります。エラー画面は集約例外ハンドラー([[basic-library:whoops:2.7|Whoops]])から呼び出されます。+
  
 ---- ----
行 44: 行 43:
  
   * debug --- デバッグモード(既定値は 環境変数APP_DEBUGの値)   * debug --- デバッグモード(既定値は 環境変数APP_DEBUGの値)
-  * controller --- 本番用エラー画面のコントローラクラス(後述) +  * controller --- 本番用エラー画面のコントローラクラス 
-  * action --- 本番用エラー画面のアクションメソッド(後述)+  * action --- 本番用エラー画面のアクションメソッド
  
 \\ \\
行 51: 行 50:
  
 ===== 集約例外コントローラ ===== ===== 集約例外コントローラ =====
-> TODO:+ 
 +集約例外ハンドラーから呼び出されるコントローラを集約例外コントローラと呼びます。whoops.setting.php での設定に従い UncaughtExceptionHandler@render メソッドが実行されてエラー画面を表示します。以下に集約例外コントローラを示します。
  
 {{fa>folder-open-o}} ** /apricot/app/Exceptions ** {{fa>folder-open-o}} ** /apricot/app/Exceptions **
行 85: 行 85:
  
         // エラー画面を表示する         // エラー画面を表示する
-        echo render('error.exception', ['status_code'=>$status_code])->commit();+        render('error.exception', ['status_code'=>$status_code])->commit($status_code);
     }     }
 } }
 </code> </code>
 +
 +  * 例外の種類に応じて表示用のステータスコードを設定します。
 +    * CSRFエラーなどの TokenMismatchException( トークンエラー )は419( Page Expired )に設定
 +    * HttpException( ヘルパー関数 ''abort()'' によるHTTP例外 )はそのステータスコードを使用
 +    * その他の例外は 500( Internal Server Error )に設定
 +
 +  * ヘルパー関数 render() を呼び出してレスポンスをレンダリングしています
 +  * **render(string $view=null, array $variables=[])**
 +    - $view : テンプレート名\\ 上例では assets/views/error/exception.blade.php がテンプレートファイルになります
 +    - $variables : テンプレート変数の連想配列\\ 上例では $status_codeをテンプレートに渡しています。
 +  * commit()メソッドはレンダリングされたHTMLを確定してレスポンスを送信します
  
 \\ \\
 +
 +
  
 ===== HTMLテンプレート ===== ===== HTMLテンプレート =====
行 101: 行 114:
 テンプレート error.exception は、error.layout から継承して作成します。 テンプレート error.exception は、error.layout から継承して作成します。
  
-\\ 
  
 ==== error.layout ==== ==== error.layout ====
行 174: 行 186:
 </html> </html>
 </code> </code>
- 
-\\ 
  
 ==== error.exception ==== ==== error.exception ====
  
-以下に集約例外コントローラのrenderアクションでレンダリングしているHTMLテンプレート( error.exception )を示します。 +以下に集約例外コントローラでレンダリングしているHTMLテンプレート( error.exception )を示します。 
  
 {{fa>folder-open-o}} ** /apricot/assets/views/error ** {{fa>folder-open-o}} ** /apricot/assets/views/error **
行 234: 行 244:
  
 ===== テスト実行 ===== ===== テスト実行 =====
-TODO:+ 
 +エラー画面を表示してみましょう。 
 + 
 +.envを以下のように修正してデバッグモードから本番モードに変更します。 
 +デバッグモードの時は集約エラーハンドラーは実行されません(その代わりに Whoops提供のPrettyErrorHandlerのデバッグ画面が表示されます )。 
 + 
 +{{fa>folder-open-o}} ** /apricot ** 
 +<code int .env> 
 +... 
 +APP_DEBUG=false 
 +... 
 +</code> 
 + 
 +ブラウザ上で以下のURLにアクセスしてみて下さい。 
 + 
 +<code> 
 +http://localhost/ws2019/apricot/public/users 
 +</code> 
 + 
 +次の画面が表示されます 
 +[{{apricot:app:app03.png?nolink}}] 
 + 
 +\\ 
 + 
 +テスト後は、.envを元に戻しておいて下さい。 
 +<code int .env> 
 +... 
 +APP_DEBUG=true 
 +... 
 +</code> 
 + 
 +\\
  
apricot/app/error.1589007884.txt.gz · 最終更新: 2020/05/09 16:04 by y2sunlight