Laravelのエラー制御とエラーページの表示
純粋にstatus code 404を返す方法
Laravelで404エラーをレスポンスする簡単な方法は、routes.phpでエラーイベントを検知できるように設定するやり方があります。
具体的にはroutes.phpで以下のとおりコーディングすることで、
/ (ルート)
および
SampleControllerで定義されていないパス
については404エラーを返すことが出来ます。
Route::controller('/', 'SampleController'); Event::listen('404', function() { return App::abort(404); //return Response::error('404'); });
レスポンスオブジェクトを利用したやり方をコメントにしてありますが、APPオブジェクトのやり方と同等の効果を得ることが出来ます。
エラーページの作成
404エラーを返すと同時にエラーページを表示するためには、
app/start/global.php
を使います。
global.phpには、
Application Error Handler
という設定項目があるので、その部分にエラーページのviewを表示するコードを追加します。
App::error(function(Exception $exception, $code) { Log::error($exception); return Response::view('error/404', array('message' => $exception->getMessage()), $code); //この行を追加 });
エラーページを表示する設定とエラーメッセージをエラーページに渡すコードを追加したので、エラーページを以下のパスに作成します。
app/views/error/404.blade.php
404.blade.phpがエラーページになるので、カスタマイズしたHTMLをコーディングします。今回は以下のHTMLにしました。
<h1><?php echo $message; ?></h1> <h2>404 Not Found</h2>
存在しないURLにアクセスすると以下のとおりエラーページが表示されました。
global.phpに追加するコードを分岐処理してステータスコードに応じたエラーページを表示することもできるようになります。
switch ($code) { case 503: return Response::view('error/503', array(), 503); default: return Response::view('error/404', array(), $code); }