LoginSignup
0
0

More than 1 year has passed since last update.

【Laravel】flashメソッドを使ったデータ取得

Posted at

はじめに

flashメソッドを使って、入力フォームに前回入力した内容を表示する方法を説明します。

flashメソッドとは

フォームに入力された値を「フラッシュデータ」として、セッションに保存する機能を持ったメソッドです。フラッシュデータは、「次に表示されるときまで値を保持し、それ以降はデータが消える」機能を持ちます。

説明

1回目フォーム送信時、$request->flash();で入力した内容をセッションに保存します。
そして、2回目フォーム送信でoldメソッドを使ってflashメソッドで保存したデータを取得して表示させます。
(1回目フォーム送信時、oldメソッドで取得できる値がないため特に表示されない)

注意点としては、oldメソッドが呼び出されるのは$requets->flash();が実行される前で、この時点でoldメソッドで取得する値は、送信されるフォームデータではありません。
取得している値は、前回フォームが送信された際にフラッシュデータに保管された値と言うことです。

<body>
    // 前回入力した内容をここに表示する
    p>{!!$beforInputData!!}</p>
    <form action="/hello" method="post">
        @csrf
        <div>NAME:<input type="text" name="name" value="{{old('name')}}"></div>
        <div>MAIL:<input type="text" name="mail" value="{{old('mail')}}"></div>
        <input type="submit">
    </form>
    <hr>
    <ol>
        // 入力内容を表示
        @foreach($form as $key => $value)
        <li>{{$key}}:{{$value}}</li>
        @endforeach
    </ol>
</body>
public function index(Request $request)
{
    $beforInputData = '';
    $form=[];
    if ($request->isMethod('post'))
    {
        // リクエストよりname、mail値を取り出す
        $form = $request->only(['name', 'mail']);
        // oldを使って前回入力した値(フラッシュデータ)を取得
        $beforInputData = old('name') . ', ' . old('mail');
        // 画面出力データセット
        $data = [
            'beforInputData'=>$beforInputData,
            'form'=>$form,
        ];
        // フラッシュデータとしてセッションに保存
        $request->flash();
        return view('test.index', $data);
    }
    $data = [
        'msg'=>$msg,
        'form'=>$form,
    ];
    return view('test.index', $data);
}

結果

結果は下記になります。
入力フォーム上部に表示されている値が、前回フォームに入力したフラッシュデータになります。
スクリーンショット 2023-05-28 13.41.37.png

参考

0
0
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
0
0