Search code examples
laravellaravel-5laravel-5.3flash-message

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');
}); 

Solution

  • 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