例外処理:アクセス先が、存在しないURLの場合の対応
- 「404 Not Found」を表示させる
- 実装理由:エラーごとに処理を変えたいから
- 「Exceptionクラス」は、PHPのエラー(例外)処理の「親」
try { // 例外処理:404 Not Found if (!$params) { throw new HttpNotFoundException(); } } catch (HttpNotFoundException) { $this->render404Page(); }
catch (HttpNotFoundException) { --- ① $this->render404Page(); } --- catch() {例外処理} --- throw new HttpNotFoundException(); を使えば、「①」が呼び出される。
class_exists()
:クラスが存在するかを判別してくれるメソッドmethod_exists()
:メソッドが存在するかを判別してくれるメソッド- 使い所:エラーが発生する箇所
- 動作の根本になる箇所から、エラー元になるものを探す。
例:URLを振り分ける Router を考えると良いかも。
上記の判別メソッドを使って、404 のエラー(例外)処理を実装する。
例: 1. 存在しないクラスがでてきたら、404を返す if (!class_exists($controllerClass)) { throw new HttpNotFoundException(); } 2. 存在しない関数(メソッド)がでてきたら、404を返す if (!method_exists($action)) { throw new HttpNotFoundException(); }
・よりクレバーな実装
throw new HttpNotFoundException();
の引数に、エラーごとに異なる文字列を入れといて、
ログにエラー箇所を吐くようにする実装方法それ以外に、簡易的に実装の際にエラー箇所を明示するなら、以下かが例。
if (!$params) { echo $params . 'URLは、存在しません'; die(); } if (!class_exists($controllerClass)) { echo $controllerClass . 'クラスは、存在しません'; die(); } if (!method_exists($action)) { echo $action . '関数は、存在しません'; die(); }