LaravelでViewで渡される`$errors`をControllerや独自ライブラリやら好きなところで使いたいとき

Laravelの$errors便利ですよね!
でもView以外で使いたいってこともあると思うんです。
そんなときどうすればいいか。

コード追えば一瞬で分かっちゃうんですが、公式マニュアルに記述がないしこのことを言及しているサイトも見当たらなかったのでここに記録します。

公式マニュアルではこう説明されています。

Tip!! \$errors変数はwebミドルウェアグループに所属する、Illuminate\View\Middleware\ShareErrorsFromSessionミドルウェアによりビューに結合されます。このミドルウェアが適用される場合は、いつでもビューの中で\$errors変数が使えます。\$errors変数はいつでも定義済みであると想定でき、安心して使えます。

ref. Laravel 5.5 バリデーション バリデーションエラー表示

なるほど。ShareErrorsFromSessionの中身を見てみると、

        $this->view->share(
            'errors', $request->session()->get('errors') ?: new ViewErrorBag
        );

ref. laravel/framework src/Illuminate/View/Middleware/ShareErrorsFromSession.php

これそのままパクればいけますね。
Controllerだったら

    public function index(Request)
    {
        $errors = $request->session()->get('errors');

        ...
    }

でいけるし、Controller以外で使いたければRequestファサード使って

    $errors = \Request::session()->get('errors');

でもいいし。

...

余談ですが、$erros以外に予約されている変数があるのかなと思って眺めたのですが、ぱっと見た感じ$app$__envがview->share()されていましたよっと。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.