mercuryseries/flashy
A Laravel package for stylish flash notifications with animated toast messages. Quickly display success, error, warning, or info alerts after redirects, with simple helper methods and customizable styling—ideal for user feedback in web apps.
Installation
composer require mercuryseries/flashy
Publish the config (optional):
php artisan vendor:publish --provider="MercurySeries\Flashy\FlashyServiceProvider" --tag="config"
Basic Usage Trigger a flash message in a controller:
use MercurySeries\Flashy\Flashy;
public function store(Request $request)
{
$request->validate([...]);
// Success flash
Flashy::success('Record saved successfully!');
return redirect()->route('dashboard');
}
Display in Blade
Add this to your layout (e.g., resources/views/layouts/app.blade.php):
@include('flashy::message')
Flashy::error() for validation failures or Flashy::warning() for non-critical issues.Session::flash() with Flashy::info() for user confirmation.Conditional Flashing
if ($user->save()) {
Flashy::success('Profile updated!');
} else {
Flashy::error('Failed to update profile.');
}
Queueing Flashes Store flashes in a queue (e.g., after async processing):
Flashy::queue('Processing complete!', 'info');
Customizing Messages
Override default messages in config/flashy.php:
'success' => [
'title' => 'Success!',
'message' => 'Your action was completed.',
],
Integration with Requests Attach flashes to incoming requests (e.g., for API-like responses):
$request->flashy()->success('Data fetched');
Blade Directives Create reusable directives for common flashes:
Blade::directive('flash', function ($expression) {
return "<?php echo MercurySeries\Flashy\Facades\Flashy::{$expression}(); ?>";
});
Usage:
@flash('success', ['message' => 'Custom message'])
Flashy Middleware: Create middleware to auto-flash based on HTTP status:
public function handle($request, Closure $next)
{
$response = $next($request);
if ($response->getStatusCode() === 404) {
Flashy::error('Page not found.');
}
return $response;
}
Flashy Events: Dispatch events for flash management:
event(new FlashMessage('Login failed', 'error'));
Localization: Extend translations via resources/lang/{locale}/flashy.php:
'error' => [
'title' => 'Error',
'message' => 'Something went wrong.',
],
Session Dependency
SESSION_DRIVER is configured (e.g., file, database, or redis)..env:
SESSION_DRIVER=file
Double Flashing
with() or withInput() may conflict with Flashy.Flashy::clear();
return redirect()->withInput()->route('dashboard');
Queue Delays
database).Flashy::now() to bypass the queue:
Flashy::now()->success('Immediate message');
Blade Caching
php artisan view:clear
dd(session()->all());
config/flashy.php overrides:
dd(config('flashy'));
Flashy::listen(function ($message) {
Log::info('Flash triggered:', ['message' => $message]);
});
Custom Flash Types
Extend the Flashy facade to add methods:
// app/Providers/AppServiceProvider.php
Flashy::extend('custom', function ($message) {
return Flashy::add('custom', $message, 'custom-class');
});
Usage:
Flashy::custom('This is a custom flash!');
Override Blade View Publish and modify the Blade template:
php artisan vendor:publish --tag="flashy-views"
Edit resources/views/vendor/flashy/message.blade.php to customize styling/behavior.
API Responses
Use Flashy with API responses (e.g., Laravel Sanctum):
return response()->json(['data' => $data], 200)
->withHeaders(['X-Flash' => Flashy::getJson()]);
Client-side: Parse X-Flash in JavaScript.
Testing Mock flashes in tests:
$this->actingAs($user)
->post('/submit', $data)
->assertSessionHas('flashy', ['type' => 'success', 'message' => 'Saved!']);
How can I help you explore Laravel packages today?