Plugins
Exception Viewer
A Simple & Beautiful Exception Viewer plugin for your Filament Panels.
Panel Builder
Dark theme support
Yes
Multi language support
Yes
Not compatible with the latest version
Supported versions: 2.x - 3.x
Documentation
filament-exceptions-art

FILAMENT 8.x Packagist Tests Passing Code Style Passing Downloads

A Simple & Beautiful Exception Viewer for FilamentPHP's Admin Panel

  • For FilamentPHP 2.x use version 1.x

#Installation

  1. You can install the package via composer:
composer require bezhansalleh/filament-exceptions
  1. Publish and run the migration via:
php artisan exceptions:install
  1. Register the plugin for the Filament Panel
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
\BezhanSalleh\FilamentExceptions\FilamentExceptionsPlugin::make()
]);
}
  1. 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

  1. Extend the base model as follow:
<?php
 
namespace App\Models;
 
use BezhanSalleh\FilamentExceptions\Models\Exception as BaseException;
 
class MyCustomException extends BaseException
{
...
}
  1. Then, in a service provider's boot() method for instance AppServiceProvider:
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.

Bezhan Salleh

Bezhan Salleh is a full-stack developer with a strong focus on backend development and a passion for open-source. He’s the creator of Shield, Filament’s most starred plugin, and the author of other popular plugins, including Plugin Essentials and Google Analytics. His work focuses on delivering practical, powerful solutions with an emphasis on performance and developer experience.

6
Plugins
2,189
Stars
More from this author
Featured Plugins