Przemek
Przemek

Reputation: 822

Laravel return flash message

I am trying to return a flash message depending on the outcome of an function however I don't really know how to do this properly, can someone help me with fixing this?

Controller:

 public function postDB(Requests\NameRequest $request) {
    $newName = trim($request->input('newName'));
    $newLat = $request->input('newCode');
    $websites = new Website();
    $websites->name = $newName;
    $websites->html = $newLat;
    $websites->save();
    if ($websites->save())
    {
    $message = 'success';
    }else{
    $message = 'error';
    }
    return redirect()->back()->withInput()->with('message', 'Profile updated!');
}

Request:

   public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {   
    return [
       'img' => 'file|image',
    ];   
    }
    public function messages()
    {
        return [
            'img.image' => 'File type is not supported! Use files with extension .jpg/.jpeg/.gif',
        ];
    }

Template:

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

Route:

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

    Route::get('home', 'BuilderController@homepage');
    Route::get('pages', 'BuilderController@websites');
    Route::get('template', 'BuilderController@templates');
    Route::post('template2', 'BuilderController@postDB');
    Route::post('template', 'BuilderController@testing');
    Route::get('logout', 'BuilderController@getLogout');
    Route::get('/website/{name}', 'BuilderController@website');
}); 

Upvotes: 1

Views: 2290

Answers (2)

shukshin.ivan
shukshin.ivan

Reputation: 11340

If you pass message as a flash parameter name, use it, not status.

@if (session('message'))
@if (session('message')=="success")
    <div class="alert alert-success">
        Congrats! Everything was fine
    </div>
@else
    <div class="alert alert-error">
       Oops! Something went wrong
    </div>
@endif
@endif

Upvotes: 0

Sulthan Allaudeen
Sulthan Allaudeen

Reputation: 11310

Solution :

There could be only one reason for this issue.

The laravel will pass the flash messages only if it's registered inside the middleware web

i.e.,

Route::group(['middleware' => ['web']], function () {
   //The back()'s url should be registered here
});

Update :

It seems you need to redirect back with message and inputs

So, You can do like this

if ($request->hasFile('img')) {
    $message = 'success';
    } else {
    $message = 'error';
}
return redirect()->back()->withInput()->->with('message', $message);

Update 2 :

@if (session('status'))
@if (session('status')=="success")
    <div class="alert alert-success">
        Congrats! Everything was fine
    </div>
@else
    <div class="alert alert-error">
       Oops! Something went wrong
    </div>
@endif
@endif

Note : You can pass the status param to your wish

Upvotes: 1

Related Questions