Installation:
composer require php-flasher/flasher-livewire
Publish the config (optional):
php artisan vendor:publish --provider="PHPFlasher\FlasherLivewire\FlasherLivewireServiceProvider"
First Use Case: Trigger a flash message in a Livewire component:
use PHPFlasher\FlasherLivewire\Facades\Flasher;
public function save()
{
// Trigger a success flash message
Flasher::success('Your data has been saved!');
// Redirect or return to a Livewire component
return redirect()->route('your.route');
}
Displaying Flash Messages:
Add the Flasher component to your Livewire component's view:
<livewire:flasher />
config/flasher.php: Customize default flash message types (success, error, etc.).resources/views/vendor/flasher-livewire/flasher.blade.php: Override default UI.Triggering Flash Messages:
Flasher::success(), Flasher::error(), etc., in Livewire component methods or controllers.Flasher::success('Saved!', [
'icon' => 'check-circle',
'duration' => 5000,
]);
Conditional Flashing:
if (Flasher::has('success')) {
Flasher::success()->getMessage();
}
Livewire Component Integration:
Flasher component to customize behavior:
use PHPFlasher\FlasherLivewire\Flasher;
class CustomFlasher extends Flasher
{
public function render()
{
return view('livewire.custom-flasher');
}
}
Queueing Flash Messages:
// In a controller or Livewire component
session()->flash('flasher', ['type' => 'success', 'message' => 'Hello!']);
// In Livewire component
public function mount()
{
if (session()->has('flasher')) {
$this->flash = session('flasher');
}
}
Livewire Redirects:
Ensure flash messages persist after redirects by using redirect()->with() or session()->flash().
return redirect()->route('dashboard')->with('flasher', ['type' => 'success', 'message' => 'Done!']);
Custom Flash Types:
Extend the Flasher facade to support custom types:
Flasher::extend('warning', function ($message, $options = []) {
return ['type' => 'warning', 'message' => $message, ...$options];
});
Testing:
Mock the Flasher facade in tests:
$this->mock(Flasher::class)->shouldReceive('success')->once()->with('Test message');
Session Binding:
wire:ignore, flash messages may not render. Wrap the Flasher component in wire:key:
<div wire:key="flasher-{{ now() }}">
<livewire:flasher />
</div>
Duplicate Messages:
livewire:flasher components in the view.Livewire Component Lifecycle:
mount() or hydrate() to ensure messages are captured:
public function mount()
{
$this->flash = session('flasher');
session()->forget('flasher');
}
CSRF and Middleware:
flasher session key is preserved across middleware. Use session()->reflash() or session()->put('flasher', session('flasher')) in middleware.Check Session Data: Dump the session to verify flash messages are stored:
dd(session()->all());
Override Views:
Debug UI issues by overriding the default view (resources/views/vendor/flasher-livewire/flasher.blade.php).
Clear Cached Views:
If changes to the flasher view aren’t reflected, clear the view cache:
php artisan view:clear
Custom Flash Drivers:
Extend the Flasher class to support alternative storage (e.g., database, cache):
use PHPFlasher\FlasherLivewire\Contracts\FlasherContract;
class DatabaseFlasher implements FlasherContract
{
public function success($message, $options = [])
{
// Custom logic to store in database
}
}
Livewire Events: Trigger flash messages via Livewire events:
// In a Livewire component
$this->dispatch('flash-success', message: 'Event triggered!');
// In another component or blade view
<script>
window.addEventListener('flash-success', (e) => {
@this.call('triggerFlasher', e.detail.message, 'success');
});
</script>
Localization:
Localize flash messages by extending the Flasher facade:
Flasher::setLocale('es');
Flasher::success('¡Mensaje guardado!');
Animation:
Add animations by customizing the flasher.blade.php view:
<div x-data="{ show: true }" x-show="show" x-transition
x-init="setTimeout(() => show = false, 3000)"
class="transition-opacity duration-300">
{{ $message }}
</div>
How can I help you explore Laravel packages today?