3
8

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 3 years have passed since last update.

Laravelのフラッシュメッセージをreturn viewの時にもやりたい

Posted at

概要

エラーメッセージや完了メッセージなどを表示したい時にアラートを表示したりしますが、リロードした時には表示させたくないので、フラッシュメッセージを使いたい場面が多々あると思います。Laravelでも簡単にフラッシュメッセージを出すことができるのですが、コントローラーでのreturn redirectreturn viewではフラッシュメッセージの振る舞いが変わるので、まとめておきます。

動作環境

Laravel 5.8

前提知識

まずControllerからviewにデータを受け渡す方法として、今回の記事では2種類扱っています。

  • Controllerからviewに受け渡す変数
  • PHPのSession

前者はviewでデータを表示させるために普段使うやつです。コードでは以下のような使い方をします。

HomeController.php
public function index() {
    return view('home.index')->with('message', 'Hello!');
}
home.blade.php
<p>{{ message }}</p>

後者はPHPのセッションを用いてデータをやりとりする方法です。上と同じメッセージをセッションで実現すると下の通りになります。

HomeController.php
public function index() {
    Session::put('message', 'Hello!');
    return view('home.index');
}
home.blade.php
@if (Session::has('message'))
    <p>{{ session('message') }}</p>
@endif

本題

フラッシュメッセージを扱う時にはセッションを用います。

Controllerの処理

リダイレクトする場合

HomeController.php
public function redirect() {
    return redirect()->route('home')
                ->with('message', 'Hello!');
}

ビューを返す場合

HomeController.php
public function index() {
    Session::flash('message', 'Hello!');
    return view('home.index');
}

Viewの処理

home.blade.php
@if (Session::has('message'))
    <p>{{ session('message') }}</p>
@endif

ややこしいポイント

リダイレクトの際のredirect()->with()withはセッションのフラッシュメッセージを保存するメソッドになっています。しかし、ビューを返す際のview()->with()withは前提知識でも書いたように、変数をセットするメソッドです。なので、ビューを返す場合の処理は2行になっています。逆にリダイレクトの場合でもwithを使わずに下のように書くことも可能です。

HomeController.php
public function redirect() {
    Session::flash('message', 'Hello!');
    return redirect()->route('home');
}

最後に

ビューを返すときはフラッシュメッセージの内容を変数に入れて表示すれば良いのでは?という方もいそうですが、テンプレートでフラッシュメッセージ表示部分を共通化しているので、ビューを返す時にもセッションを使いたいという気持ちになり、記事を書きました。

参考記事

3
8
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
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?