13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-02-11

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()されていましたよっと。

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?