67

I'm trying to get a success message back to my home page on laravel.

return redirect()->back()->withSuccess('IT WORKS!');

For some reason the variable $success doesn't get any value after running this code.

The code I'm using to display the succes message:

@if (!empty($success))
    <h1>{{$success}}</h1>
@endif

I have added the home and newsletter page to the web middleware group in routes.php like this:

Route::group(['middleware' => 'web'], function () {
    Route::auth();

    Route::get('/', function () {
        return view('home');
    });

    Route::post('/newsletter/subscribe','NewsletterController@subscribe');
});

Does anyone have any idea why this doesn't seem to work?

Arcesilas
  • 1,388
  • 11
  • 24
Stefan
  • 981
  • 1
  • 9
  • 19

9 Answers9

158

You should remove web middleware from routes.php. Adding web middleware manually causes session and request related problems in Laravel 5.2.27 and higher.

If it didn't help (still, keep routes.php without web middleware), you can try little bit different approach:

return redirect()->back()->with('message', 'IT WORKS!');

Displaying message if it exists:

@if(session()->has('message'))
    <div class="alert alert-success">
        {{ session()->get('message') }}
    </div>
@endif
Community
  • 1
  • 1
Alexey Mezenin
  • 158,981
  • 26
  • 290
  • 279
  • Good to know its not needed anymore. But after removing `Route::group(['middleware' => 'web'], function () {` from my routes.php the `$success` variable still seems to be empty so that doesn't seem to be the problem here. – Stefan May 22 '16 at 15:54
  • Doesn't work either It just doesn't seem to pass the message trough it stays empty. – Stefan May 22 '16 at 16:04
  • Check if Laravel creates session files at `storage\framework\sessions`. Or if it adds data to `sessions` table if you use DB). – Alexey Mezenin May 22 '16 at 16:09
  • Yes it adds data to to `storage\framework\sessions` so that seems to work – Stefan May 22 '16 at 16:21
  • 1
    Me and my friend looked again at your code and I did something wrong with your last solution it works now :-) – Stefan May 22 '16 at 17:14
35

you can use this :

return redirect()->back()->withSuccess('IT WORKS!');

and use this in your view :

@if(session('success'))
    <h1>{{session('success')}}</h1>
@endif
Mohammad Rajabloo
  • 2,567
  • 19
  • 20
13

Controller:

return redirect()->route('subscriptions.index')->withSuccess(['Success Message here!']);

Blade

@if (session()->has('success'))
<div class="alert alert-success">
    @if(is_array(session('success')))
        <ul>
            @foreach (session('success') as $message)
                <li>{{ $message }}</li>
            @endforeach
        </ul>
    @else
        {{ session('success') }}
    @endif
</div>
@endif

You can always save this part as separate blade file and include it easily. fore example:

<div class="row">
        <div class="col-md-6">
            @include('admin.system.success')
            <div class="box box-widget">
Riajul
  • 1,140
  • 15
  • 20
Alex Sholom
  • 399
  • 4
  • 4
  • 1
    This is the best answer because it is the only one that treats the success messages as an Array, thus being possible to have multiple success messages displayed at once. – Andresa Martins Jun 16 '19 at 04:21
8

You can simply use back() function to redirect no need to use redirect()->back() make sure you are using 5.2 or greater than 5.2 version.

You can replace your code to below code.

return back()->with('message', 'WORKS!');

In the view file replace below code.

@if(session()->has('message'))
    <div class="alert alert-success">
        {{ session()->get('message') }}
    </div>
@endif

For more detail, you can read here

back() is just a helper function. It's doing the same thing as redirect()->back()

Jigar
  • 3,055
  • 1
  • 32
  • 51
6

One way to do that is sending the message in the session like this:

Controller:

return redirect()->back()->with('success', 'IT WORKS!');

View:

@if (session()->has('success'))
    <h1>{{ session('success') }}</h1>
@endif

And other way to do that is just creating the session and put the text in the view directly:

Controller:

return redirect()->back()->with('success', true);

View:

@if (session()->has('success'))
    <h1>IT WORKS!</h1>
@endif

You can check the full documentation here: Redirecting With Flashed Session Data

I hope it is very helpful, regards.

Radames E. Hernandez
  • 4,235
  • 27
  • 37
4

All of the above are correct, but try this straight one-liner:

{{session()->has('message') ? session()->get('message') : ''}}

3

In Controller

return redirect()->route('company')->with('update', 'Content has been updated successfully!');

In view

@if (session('update'))
  <div class="alert alert-success alert-dismissable custom-success-box" style="margin: 15px;">
     <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
     <strong> {{ session('update') }} </strong>
  </div>
@endif
2

You can use laravel MessageBag to add our own messages to existing messages.

To use MessageBag you need to use:

use Illuminate\Support\MessageBag;

In the controller:

MessageBag $message_bag

$message_bag->add('message', trans('auth.confirmation-success'));

return redirect('login')->withSuccess($message_bag);

Hope it will help some one.

  • Adi
2

in Controller:

 `return redirect()->route('car.index')->withSuccess('Bein ajoute')`;

In view

  @if(Session::get('success'))
           <div class="alert alert-success">
               {{session::get('success')}}
           </div>
   @endif
yassine dotma
  • 697
  • 8
  • 10