bezhansalleh / filament-exceptions
A Simple & Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel
Fund package maintenance!
bezhanSalleh
Installs: 119 879
Dependents: 13
Suggesters: 0
Security: 0
Stars: 172
Watchers: 3
Forks: 24
Open Issues: 0
Requires
- php: ^8.1|^8.2
- filament/filament: ^3.2
- spatie/laravel-package-tools: ^1.15
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.1
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-livewire: ^2.0
- spatie/laravel-ray: ^1.26
README

Exception Viewer
A Simple & Beautiful Exception Viewer for FilamentPHP's Admin Panel
- For FilamentPHP 2.x use version 1.x
Installation
- You can install the package via composer:
composer require bezhansalleh/filament-exceptions
- Publish and run the migration via:
php artisan exceptions:install
- Register the plugin for the Filament Panel
public function panel(Panel $panel): Panel { return $panel ->plugins([ \BezhanSalleh\FilamentExceptions\FilamentExceptionsPlugin::make() ]); }
- Activate the plugin by editing your App's Exception Handler as follow:
- Laravel 11.x+
Enable it in the
bootstrap/app.php
file<?php use BezhanSalleh\FilamentExceptions\FilamentExceptions; use Illuminate\Foundation\Application; ... return Application::configure(basePath: dirname(__DIR__)) ... ->withExceptions(function (Exceptions $exceptions) { $exceptions->reportable(function (Exception|Throwable $e) { FilamentExceptions::report($e); }); }) ...
- Laravel 10.x
<?php namespace App\Exceptions; use BezhanSalleh\FilamentExceptions\FilamentExceptions; class Handler extends ExceptionHandler { ... public function register() { $this->reportable(function (Throwable $e) { if ($this->shouldReport($e)) { FilamentExceptions::report($e); } }); ... } }
Configuration Options
When registering the FilamentExceptions plugin, you can chain various methods to customize its behavior. Here are all available configuration options:
Navigation
FilamentExceptionsPlugin::make() ->navigationBadge(bool | Closure $condition = true) ->navigationBadgeColor(string | array | Closure $color) ->navigationGroup(string | Closure | null $group) ->navigationParentItem(string | Closure | null $item) ->navigationIcon(string | Closure | null $icon) ->activeNavigationIcon(string | Closure | null $icon) ->navigationLabel(string | Closure | null $label) ->navigationSort(int | Closure | null $sort) ->registerNavigation(bool | Closure $shouldRegisterNavigation) ->subNavigationPosition(SubNavigationPosition | Closure $position)
Labels and Search
FilamentExceptionsPlugin::make() ->modelLabel(string | Closure | null $label) ->pluralModelLabel(string | Closure | null $label) ->titleCaseModelLabel(bool | Closure $condition = true) ->globallySearchable(bool | Closure $condition = true)
Tabs Labels and Icons
FilamentExceptionsPlugin::make() ->activeTab(int $tab) // 1 = Exception, 2 = Headers, 3 = Cookies, 4 = Body, 5 = Queries ->bodyTabIcon(string $icon) ->bodyTabLabel(string $label) ->cookiesTabIcon(string $icon) ->cookiesTabLabel(string $label) ->exceptionTabIcon(string $icon) ->exceptionTabLabel(string $label) ->headersTabIcon(string $icon) ->headersTabLabel(string $label) ->queriesTabIcon(string $icon) ->queriesTabLabel(string $label)
Mass Pruning Settings
FilamentExceptionsPlugin::make() ->modelPruneInterval(Carbon $interval)
Note This requires laravel scheduler to be setup and configured in order to work. You can see how to do that here Running The Scheduler
Tenancy Configuration
FilamentExceptionsPlugin::make() ->scopeToTenant(bool | Closure $condition = true) ->tenantOwnershipRelationshipName(string | Closure | null $ownershipRelationshipName) ->tenantRelationshipName(string | Closure | null $relationshipName)
General Configuration
FilamentExceptionsPlugin::make() ->cluster(string | Closure | null $cluster) ->slug(string | Closure | null $slug)
Example usage:
return $panel ->plugins([ FilamentExceptionsPlugin::make() ->navigationLabel('Error Logs') ->navigationIcon('heroicon-o-bug-ant') ->navigationBadge() ->navigationGroup('System') ->modelPruneInterval(now()->subDays(7)) ]);
Custom Exception Model
- Extend the base model as follow:
<?php namespace App\Models; use BezhanSalleh\FilamentExceptions\Models\Exception as BaseException; class MyCustomException extends BaseException { ... }
- Then, in a service provider's
boot()
method for instanceAppServiceProvider
:
use App\Models\MyCustomException; use BezhanSalleh\FilamentExceptions\FilamentExceptions; ... public function boot() { FilamentExceptions::model(MyCustomException::class); } ...
Theme
By default the plugin uses the default theme of Filamentphp, but if you are using a custom theme then include the plugins view path into the content array of your tailwind.config.js file:
export default { content: [ // ... './vendor/bezhansalleh/filament-exceptions/resources/views/**/*.blade.php', ], // ... }
Translations
Publish the translations with
php artisan vendor:publish --tag=filament-exceptions-translations
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.