読者です 読者をやめる 読者になる 読者になる

日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

PHP製マイクロフレームワークSlimで404ページ500ページを表示させるだけ

Error Slim PHP

タイトルの通りの事をしようとしていたら
404ページの内容を考え始め
気がついたらBLEACHを読んでいました。
いつからコードを書いていると錯覚していたのでしょう。


さて、Slimでエラーハンドリング試してみました。
ドキュメントが完璧だったので特に面白みもなかったです←
Slim Framework Documentation

Slimとは・・・

PHP製のマイクロフレームワークでとても簡単に使えます。
細かいことは書きません。
以下のリンク先にもあるようにわずか数行でHello Worldが完成します。
Slim Framework

<?php

require '../vendor/autoload.php';

// 初期化・設定

$app = new \Slim\Slim();

// ルーティング

$app->get('/', function () {
    echo "Hello world";
});

// 実行

$app->run();

はい。

何がしたかったか

404とか500とかのページを出したかったんです。
Slim エラーハンドリング
http://docs.slimframework.com/#Error-Handling-Overview

結果

<?php

require '../vendor/autoload.php';

// 初期化・設定

$app = new \Slim\Slim();

$app->config(array(
    'templates.path' => '../templates',
    'debug' => false,
));

// エラーハンドリング

$app->notFound(function () use ($app) {
    $app->render('404.html');
});

$app->error(function (\Exception $e) use ($app) {
    $app->render('500.html');
});

// ルーティング

$app->get('/', function () {
    echo "Hello world";
});

$app->get('/notfound', function() use ($app) {
    $app->notFound();
});

$app->get('/error', function() {
    throw new Exception();
});

$app->get('/error/wazato', function() use ($app) {
    try {
        throw new \Exception('わざとのえらー');
    } catch( \Exception $e ) {
        $app->error($e);
    }
    echo 'ここには来ない';
});

// 実行

$app->run();

これと404.htmlと500.htmlを追加するだけです。

$app->config(array(
    'templates.path' => '../templates',
    'debug' => false, // ここの設定
));

debugをfalseとすることによってエラーページを500ページにすることが出来ます。
これでもし仮に万が一Fatalエラーとか起きてたとしても500ページを出すことが出来ますね!

わざとnotfoundやerrorを実行したい時は以下のようにすればいいようです。

$app->get('/notfound', function() use ($app) {
    $app->notFound();
});

$app->get('/error/wazato', function() use ($app) {
    try {
        throw new \Exception('わざとのえらー');
    } catch( \Exception $e ) {
        $app->error($e);
    }
    echo 'ここには来ない';
});

やっぱフレームワークなら大体揃ってますね。

今回検証に使ったレポジトリ
tarata/slim-error-handling-try · GitHub