search
LoginSignup
28
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

【Laravel】フラッシュデータを使おう

はじめに

Laravelを触り始めた時、簡単なCRUD機能を持ったToDoアプリを作りました。
その時、データベースに保存したり、削除したりできるような機能を実装していました。
しかし、保存ボタンや削除ボタンを押してもアクションの処理が走るだけで味気ないです。保存できても出来てなくてもリダイレクトしたページを表示するだけです。
そんな味気ないアプリケーション嫌だ!!!!「保存に成功しました」ぐらいのステータスメッセージを表示はしてほしい。。。メッセージがないと成功か失敗かわからないですよね。
しかし、意外とステータスメッセージを自力で実装することはめんどくさいです。その理由を2つあげます。。

  • 保存処理が実行した時にメッセージの内容を設定します。保存処理では最後にリダイレクトすることがほとんどだと思うので、メッセージの内容をリダイレクト先のアクションへ渡します。受け取ったアクションからビューへ受け渡すようにコードを書かないといけません。
  • ステータスメッセージの表示は基本的に一回だけです。保存処理後のリダイレクト先のページから他のページにアクセスする時にメッセージを表示されないようにしないといけません。

上記の理由でステータスメッセージを自力で実装するのはとてもめんどくさいです。。
そんな時にセッションのフラッシュデータです!!!
セッション?フラッシュデータ?となると思いますので、ざっくり説明します
セッションを使うことでWebブラウザが閉じるまで一時的にサーバー側にデータを保存することが出来ます
フラッシュデータは次のリクエストまでの間セッションに保存されるデータのことです。
次のリクエスト(他のページへアクセスなど)では削除されます。ですので、フラッシュデータは主にステータスメッセージなど継続しない情報にはもってこいです!!

ではフラッシュデータを使ってステータスメッセージを表示させる方法を解説します。

フラッシュデータの渡し方

フラッシュデータの渡し方は主に3種類あります

flashメソッドで渡す

Flashメソッドを使うとセッションへstatusという名前のデータを保存できます。
statusの中身は処理が完了しましたです

保存アクション内
$request->session()->flash('status', '処理が完了しました');
return redirect('/');

スタティックメソッドを使う

Sessionクラスのflashメソッドを使うことでも値を渡すことができます

保存アクション内
\Session::flash('flash_message', '処理が完了しました');
return redirect('/');

withメソッドを使う

flashメソッドと同じようにフラッシュデータを渡せるwithメソッドもあります

保存アクション内
return redirect('dashboard')->with('status', '処理が完了しました');

ビューでの表示

次にビューでの表示の仕方について説明します
Bootstrapを使えばいい感じに表示してくれます

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif

以上がフラッシュデータを使ったステータスメッセージの表示仕方です。

おまけ

以下おまけです。

フラッシュデータを1つ先のリクエストまで持続させたい場合

reflashメソッドを使うと全フラッシュデータを次のリクエストまで保持できます。

$request->session()->reflash();

特定のフラッシュデータのみ持続させたい場合

keepメソッドを使います。

$request->session()->keep(['user', 'email']);

以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!

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
What you can do with signing up
28
Help us understand the problem. What are the problem?