開発室ブログ

Laravel

Laravelで ExceptionといっしょにViewを投げる

カメラを買ったものの、運動会の撮影に失敗した開発室員です。
予備バッテリーも忘れるし。何事も練習しないとダメですねぇ。

今回はLaravelのエラーハンドリングのお話にします。

アプリケーション的な例外処理

システムやフレームワークに起因するエラーや、入力バリデーションで対応するエラーではなく…今回はアプリケーション側での例外を考えてみます。

render() が膨らむ問題

例外のハンドリング、細かくやろうとすると Exceptions/Handler.php や Exceptions/HogeException.php の render() が複雑怪奇になりがちです…それをちょっとわかりやすくならないか? という。

Responsableで例外とレスポンスを関連付け

Laravel5.5 から Responsable というインタフェースが追加されています。~able系。
ADRパターンのレスポンダで使ったりするようですが、今回はそれを使って表題の件を実装してみる。

Exceptionをつくる

AppExceptions\HogeException.php としまして…

<?php
namespace App\Exceptions;

use Illuminate\Contracts\Support\Responsable;
use Illuminate\Contracts\View\View;
use Symfony\Component\HttpFoundation\Response;
use Throwable;
use RuntimeException;

class HogeException extends RuntimeException implements Responsable
{
    protected $error = 'error';
    private $view;

    public function __construct (
        View $factory, string $message = "", int $code = 0, Throwable $previous = null )
    {
        // Viewを受け取って
        $this->view = $factory;
        parent::__construct($message, $code, $previous);
    }

    /**
     * Responsableインタフェースの実装
     */
    public function toResponse($request) : Response
    {
        return new Response (
            // withでテンプレートに渡す
            $this->view->with($this->error, $this->message)
        );
    }

    /**
     * ログも書けます
     */
    public function report()
    {
        logger()->alert(
            sprintf("%s %s [%s]",
                request()->method(),
                request()->path(),
                $this->message
            )
        );
    }
}

Exception投げるときは useしといて

    throw new HogeException (
        view($this->error_tpl), 'エラーメッセージ'
    );

こんな感じで書けます。便利かも。

Laravel本のご紹介

本。まとまってるから通しで読みやすいし、いいですよね。つい買ってしまいます。
Laravelの参考に読んでる(読んでた)本のご紹介でも。

ほん

コッタコタですな…

まずは上のやつ

まさに Laravel入門 って感じです。 これをとりあえず通しでやってみれば、一通りの流れや使い方が何となくわかる。実際の要件を実現するには不足かと思いますが、この本が終わるころには Laravel公式 + ネット検索で対応できる。はず。

ただし、これはPHPの入門本ではないです。PHP中級者? 向けってやつなのかな。

んじゃ次は…

まだ全部読んでないですが…この記事の更新時点では、一番新しい日本語本でしょうか?
最初に紹介した入門本よりも更に幅広く、より具体的に書いてあるので参考になります。入門本は終わったけど、もっと知りたい! なんかモヤモヤする! と思った方にちょうど良いかも。
PHPフレームワークは各種使い慣れてて、Laravelやってみるかなって人はこっちから始めてもいいのかな。あとはまぁ、リファレンス的なつまみ食いにも便利か。

Laravel本は少ないけど…

新しいものを導入する時って

  • 何から手をつければいいのやら
  • 周囲に聞ける人がいない
  • つか、何から聞けばいいのか
  • 公式だけだと良くわからなかった
  • ブログや解説記事だけだと不安が

みたいな状況になったりしがち。
そんな時は、本を通しで(手を動かしながら)終わらせた方が効率的な場合も多いかな…と個人的には思います。

では、ひとまずこんなところで。

RecentPost