前 チュートリアル HTTPエラー処理その1

次 チュートリアル Smartyの使い方

 

おはようございます。SAN値0のゆうきんです。

前回に引き続きHTTPエラー処理の説明を行います。

今回は、404と500以外のエラーを返す方法について説明します。

方法は2種類あります。順に説明します。

 

1,404と500以外のエラーを返す簡単な方法

これで、明示的に405エラーを返すことができます。

今回はnullとしましたが、第1引数にビューオブジェクトを渡すと、それが表示されます。

なお、nullだと真っ白の画面が表示されます。

Response クラスには他の使い方もあるのですが、記事の項目が違うため割愛します。

 

2,エラーを定義し、それを投げる

1の方法で全て解決できますが、1の方法だとエラーを返したい場所ごとに書かなければならないため、非常に面倒くさいです。

404と500を明示的に返すときと同じように、例外を投げるだけにしたいですよね?

そこでエラーを定義したクラスを作り、それを例外として投げる方法を説します。

今回は405エラーを作成することを前提にして説明します。

まずは、 fuel/app/classes/ に httpexceptions.php というファイルを作成して下さい。

そして、以下のクラスを記述して下さい。

1の方法とほぼ同じです。

今回は、第1引数でビューオブジェクトを生成して渡していますが、適当なビューファイルを用意して下さい。

この場合は405エラーだと視覚的にわかるビューが最適だと思われます。

定義したいエラーが増えるたびに、この httpexceptions.php にクラスを追加していくことになるので、覚えておいて下さい。

クラス名は定義したいHTTPエラーコードに準じた名前にするとわかりやすくていいです。

記述が終わったら、  fuel/app/bootstrap.php を開き、次のように書き加えて下さい。

‘HttpMethodNotAllowd’ が定義したエラークラス名、 APPPATH.’classess/httpexceptions.php’ がエラークラスを定義しているファイル名となります。

ここまで終わったら下準備は同じです。

後は、404と500と同じように例外を投げるだけです。

これで405エラーを明示的に返すことが可能となります。

さらに。この方法を使用すれば、404と同じように405が発生したらこのページにルーティングするという設定を適用することができます。

ただし、またいろいろと手を加える必要があります。

その方法は次の項目をご覧ください。

 

3,2で発生させた例外にルート設定を行う

この項目は2の項目で定義した405に対してルーティングを行うことを前提とします。

2で発生させた例外は public/index.php で受け取ることが可能です。

なので、以下の通りに書き加えて下さい。

catch文で、さきほど定義した例外 HttpMethodNotAllowd を受け取り、ルート設定があれば、そちらにルーティングし、なければ2で生成したビューがそのまま表示されます。

ルート _405_ を fuel/config/routes.php で定義していれば、そちらにルートされるということです。

catch文の中で _405_ があれば・・・とやっています。

つまり _405_ という名前は自由に変更できます。が、変数の命名はなるべく揃えた方がわかりやすので、このままで良いでしょう。

 

以上で、HTTPエラー処理の説明を終わります。

以前説明した、モードで処理を切り替える方法などを複合すれば、開発環境では405エラーを発生させるが、製品環境では404エラーとする、ということが可能です。

下準備は手間ですが、一度作成してしまえば繰り返し使えるので非常に便利です。

では、おやすみなさい。