4
2

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でフラッシュデータ(直後のHTTPリクエストの間だけセッションに保存されるデータ)を使う

Last updated at Posted at 2020-05-13

目次

Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方

Laravelバージョン

動作確認はLaravel Framework 7.19.1で行っています

フラッシュデータ

Laravelでは直後のHTTPリクエストの間だけセッションにデータを保存し、それ以降は削除されるフラッシュデータという仕組みが提供されています
これまで下記記事で扱ってきました
Laravelでリクエストデータを取得する
Laravelで入力値エラーチェック(validate)を実装する
Laravelでリダイレクトを使う
いずれの場合もリクエストデータをフラッシュデータとして保存していましたが、今回はリクエストデータではなく、サーバサイドで好きな値をフラッシュデータに格納します

前提条件

eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

Controllerにメソッド追加

(1) /sample/app/Http/Controllers/SampleController.phpにflashメソッド、flash2メソッドを追記

    public function flash(Request $request)
    {
        $request->getSession()->flash('key', 'value1');
        $request->getSession()->flashInput(array_merge($request->input(), ['key' => 'value2']));
        return view('sample.flash');
    }

    public function flash2(Request $request)
    {
        return view('sample.flash2');
    }

$request->getSession()->flashでフラッシュデータに保存した場合、old関数で取得できません
$request->getSession()->flashInputでフラッシュデータに保存した場合、old関数を使って取得します

(2) /sample/routes/web.phpに下記を追記
Route::get('sample/flash', 'SampleController@flash');
Route::get('sample/flash2', 'SampleController@flash2');

viewの作成

(1) /sample/resources/views/sample/flash.blade.phpファイル作成

flash.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        <div>{{ session('key') }}</div>
        <div>{{ old('key') }}</div>
    </body>
</html>

(2) /sample/resources/views/sample/flash2.blade.php

flash2.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        <div>flash2です</div>
        <div>{{ session('key') }}</div>
        <div>{{ old('key') }}</div>
    </body>
</html>

動作確認

http://localhost/laravelSample/sample/flash

実行結果

value1
value2

$request->getSession()->flash
$request->getSession()->flashInput
どちらで保存したフラッシュデータも出力されました

http://localhost/laravelSample/sample/flash2

実行結果

flash2です
value1
value2

続いてflash2にアクセスするとコントローラーで何も処理していないのにフラッシュデータが出力されました
フラッシュデータというのは直後のHTTPリクエストの間だけセッションにデータを保存されるものです
今アクセスしたflash2が直後のHTTPリクエストということです
Laravelで入力値エラーチェック(validate)を実装するでフォームリクエストクラスを使ってエラーチェックをしましたが、エラーチェックに引っかかるとリダイレクトされます。フォームリクエストクラスエラー存在時は、そのリダイレクトが直後のHTTPリクエストということになります

http://localhost/laravelSample/sample/flash2

実行結果

flash2です

続いてもう一度flash2にアクセスすると今度はvalue1、value2が出力されません
もうフラッシュデータを保存した直後のリクエストではないためです

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?