Plugins
Support
Visit GitHub
Exception Viewer
A Simple & Beautiful Exception Viewer plugin for your Filament Panels.
Panel Builder
Dark theme support
Yes
Multi language support
Yes
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, an expert full-stack developer, shines in the open-source arena with his suite of popular plugins for the Filament community. His standout creation, the Shield plugin, reigns as the most starred and top-ranked open-source plugin, underscoring Bezhan's knack for crafting powerful tools. With a deep passion for technology and innovation, Bezhan consistently delivers with a commitment to excellence.

5
Plugins
1,999
Stars
More from this author
Featured Plugins