1. ホーム
  2. session

[解決済み] Laravelでは、セッションで異なるタイプのフラッシュメッセージを渡すための最良の方法

2022-05-09 15:35:04

質問

Laravelで初めてアプリを作っているのですが、セッションフラッシュメッセージについて理解しようとしています。私の知る限り、コントローラアクションでフラッシュメッセージを設定するには、次のようにします。

Redirect::to('users/login')->with('message', 'Thanks for registering!'); //is this actually OK?

別のルートにリダイレクトする場合や

Session::flash('message', 'This is a message!'); 

マスターブレードのテンプレートでは、次のようになります。

@if(Session::has('message'))
<p class="alert alert-info">{{ Session::get('message') }}</p>
@endif

お気づきかもしれませんが、私のアプリでは Bootstrap 3 を使用しており、さまざまなメッセージ クラスを利用したいと考えています。 alert-info , alert-warning , alert-danger などです。

コントローラで、設定するメッセージの種類がわかっているとして、それをビューに渡して表示するには、どのような方法が良いでしょうか?それぞれのタイプについて、セッションに個別のメッセージを設定すべきでしょうか (例. Session::flash('message_danger', 'This is a nasty message! Something's wrong.'); )? そうすると、ブレードテンプレートにメッセージごとに別々のif文が必要になりますね。

何かアドバイスがあればお願いします。

解決方法は?

1つの解決策は、セッションに2つの変数をフラッシュすることです。

  1. メッセージそのもの
  2. アラートのクラス名

を例にとります。

Session::flash('message', 'This is a message!'); 
Session::flash('alert-class', 'alert-danger'); 

次に、ビューで

@if(Session::has('message'))
<p class="alert {{ Session::get('alert-class', 'alert-info') }}">{{ Session::get('message') }}</p>
@endif

なお、ここでは デフォルト値 の中に Session::get() そうすれば、警告の内容が alert-info クラスがあります。

(これは簡単な例であり、未検証です :) )