sessionlaravellaravel-4

In Laravel, the best way to pass different types of flash messages in the session


I'm making my first app in Laravel and am trying to get my head around the session flash messages. As far as I'm aware in my controller action I can set a flash message either by going

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

For the case of redirecting to another route, or

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

In my master blade template I'd then have:

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

As you may have noticed I'm using Bootstrap 3 in my app and would like to make use of the different message classes: alert-info, alert-warning, alert-danger etc.

Assuming that in my controller I know what type of message I'm setting, what's the best way to pass and display it in the view? Should I set a separate message in the session for each type (e.g. Session::flash('message_danger', 'This is a nasty message! Something's wrong.');)? Then I'd need a separate if statement for each message in my blade template.

Any advice appreciated.


Solution

  • One solution would be to flash two variables into the session:

    1. The message itself
    2. The "class" of your alert

    for example:

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

    Then in your view:

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

    Note I've put a default value into the Session::get(). that way you only need to override it if the warning should be something other than the alert-info class.

    (that is a quick example, and untested :) )