Debug School

rakesh kumar
rakesh kumar

Posted on

Diiferent way to render Error message in Laravel

With Redirect and Session Flash Data (Most Common)
With Redirect and Query String
With Laravel Validation Errors
With Custom Named Session Keys
With Toastr or JavaScript Alerts (for AJAX or SPA)
With Laravel Components (Reusable)

In Laravel, rendering error messages can be done in several ways, each with its own use case and benefits. Here are the most common and effective approaches:

With Redirect and Session Flash Data (Most Common)
Controller:

return redirect()->route('login')->with('error', 'Email does not exist');
Enter fullscreen mode Exit fullscreen mode

Blade:

@if(session('error'))
    <div class="alert alert-danger">
        {{ session('error') }}
    </div>
@endif
Enter fullscreen mode Exit fullscreen mode

Pros: Works well with redirects; message disappears after one request.

Cons: Only available for the next request (flash data).

With Redirect and Query String
Controller:

return redirect()->route('login', ['loginerror' => 'Email does not exist']);
Enter fullscreen mode Exit fullscreen mode

Blade:

@if(request('loginerror'))
    <div class="alert alert-danger">
        {{ request('loginerror') }}
    </div>
@endif
Enter fullscreen mode Exit fullscreen mode

Pros: Message persists in the URL until removed.

Cons: Message is visible in the URL (not suitable for sensitive info).

With Laravel Validation Errors
Controller:

return redirect()->back()->withErrors(['email' => 'Email does not exist']);
Enter fullscreen mode Exit fullscreen mode

Blade:

@if($errors->has('email'))
    <div class="alert alert-danger">
        {{ $errors->first('email') }}
    </div>
@endif
Enter fullscreen mode Exit fullscreen mode

Pros: Integrates with Laravel's validation system, supports multiple errors.

Cons: Requires using $errors bag, best for form validation.

With Custom Named Session Keys
Controller:

return redirect()->route('login')->with('custom_error', 'Custom error message');
Enter fullscreen mode Exit fullscreen mode

Blade:

@if(session('custom_error'))
    <div class="alert alert-warning">
        {{ session('custom_error') }}
    </div>
@endif
Enter fullscreen mode Exit fullscreen mode

Pros: Useful for multiple types of messages on the same page.

With Toastr or JavaScript Alerts (for AJAX or SPA)
Controller:

return response()->json(['error' => 'Email does not exist'], 422);
Enter fullscreen mode Exit fullscreen mode

Blade/JS:

if(response.error) {
    toastr.error(response.error); // Or use alert(response.error)
}
Enter fullscreen mode Exit fullscreen mode

Pros: Great for AJAX, no page reload needed.

Cons: Requires JS and a notification library.

With Laravel Components (Reusable)
Blade Component (resources/views/components/alert.blade.php):

@if($message)
    <div class="alert alert-{{ $type ?? 'danger' }}">
        {{ $message }}
    </div>
@endif
Enter fullscreen mode Exit fullscreen mode

Usage:

<x-alert :message="session('error')" type="danger"/>
Enter fullscreen mode Exit fullscreen mode

Pros: DRY, reusable, customizable.

  1. With Old Input (for Form Re-population) Controller:
return redirect()->back()->withInput()->with('error', 'Email does not exist');
Enter fullscreen mode Exit fullscreen mode

Blade:

<input type="email" name="email" value="{{ old('email') }}">
@if(session('error'))
    <div class="alert alert-danger">{{ session('error') }}</div>
@endif
Enter fullscreen mode Exit fullscreen mode

Image description

Image description

Top comments (0)