Quantcast
Channel: laravel5.8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 87

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

$
0
0

概要

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

動作環境

Laravel 5.8

前提知識

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

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

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

HomeController.php
publicfunctionindex(){returnview('home.index')->with('message','Hello!');}
home.blade.php
<p>{{ message }}</p>

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

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

本題

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

Controllerの処理

リダイレクトする場合

HomeController.php
publicfunctionredirect(){returnredirect()->route('home')->with('message','Hello!');}

ビューを返す場合

HomeController.php
publicfunctionindex(){Session::flash('message','Hello!');returnview('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
publicfunctionredirect(){Session::flash('message','Hello!');returnredirect()->route('home');}

最後に

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

参考記事

https://stackoverflow.com/questions/42417865/how-to-return-view-with-flash-message


Viewing all articles
Browse latest Browse all 87

Trending Articles