3
1

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

Laravelでフォーム保存後のフィードバックにSessionのフラッシュデータを使うのと、そのテスト方法

Last updated at Posted at 2019-09-27

Webページでは何らかのフォームで保存ボタンを押した後に次のページにリダイレクトすることがあり、
リダイレクトされた次のページでフィードバックしたいということがよくあります。

image.png
※画像はイメージです

Laravelにおいてこのフィードバックを出す方法と、そのテスト方法について説明します。

バックエンドでセッションのフラッシュデータに値を入れる

Controller で以下のようにwithでフラッシュデータに値を入れておきます。


 public function add() {
   // 保存とか色々する
   // 最後に次のページへリダイレクトさせる
   return redirect()->route('/')->with('success', '保存が成功しました');
 } 

公式ドキュメントでいうと https://readouble.com/laravel/5.8/ja/responses.html

フラッシュデータを保存するリダイレクト

あたりの章です。

フィードバックの HTML と SCSS

Laravelのヘルパ関数でsession()というのがあるので、それで値をとります。

LaravelのBladeファイルで書くとHTMLは以下のようになります。

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

対応するSCSS

.feedback-wrapper {
  .feedback {
    margin: auto;
    padding: 12px;
    border-radius: 4px;
    text-align: center;

    &.success {
      border: 1px solid green;
      color: green;
      font-weight: bold
    }
  }
}

テスト方法

Featureテストを書く時に、フラッシュデータが何が入っているかというのをテストに書きます。


    public function testAdd()
    {
        $this->post('/test/add', [
            'text' => '入力したテキストです',
        ])->assertRedirect('/text')->assertSessionHas('success');
    }

assertSessionHas() を使えば、仮にリダイレクト先が同じでも、入っているフラッシュデータが違う 'success' と 'warning' であっても区別することができます。

3
1
1

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?