devportolio/laravel-dump-viewer
Installation:
composer require devportolio/laravel-dump-viewer
php artisan vendor:publish --provider="DevPortolio\DumpViewer\DumpViewerServiceProvider" --tag="dump-viewer-config"
php artisan dump-viewer:install
php artisan migrate.First Use Case:
Replace dd() or dump() in your code with:
\DevPortolio\DumpViewer\Facades\DumpViewer::dump($variable, 'label');
/dump-viewer (configured in .env or config/dump-viewer.php).Quick Start:
use DevPortolio\DumpViewer\Facades\DumpViewer;
public function show(Request $request) {
$data = User::first();
DumpViewer::dump($data, 'User Data');
return view('welcome');
}
/dump-viewer.Debugging API Responses:
public function apiResponse(Request $request) {
$response = $this->service->process($request);
DumpViewer::dump($response, 'API Response');
return response()->json($response);
}
Middleware Debugging:
public function handle($request, Closure $next) {
$user = auth()->user();
DumpViewer::dump($user, 'Authenticated User');
return $next($request);
}
Event Listeners:
public function handle(OrderCreated $event) {
DumpViewer::dump($event->order, 'New Order');
// Process order...
}
Tinker Integration:
php artisan tinker
>>> $user = User::first();
>>> \DevPortolio\DumpViewer\Facades\DumpViewer::dump($user, 'Tinker User');
Conditional Dumping: Use environment checks to avoid clutter in production:
if (app()->environment('local')) {
DumpViewer::dump($variable, 'Debug Label');
}
Labeling Strategy:
User::with('roles')->get() → 'User with Roles').auth/, payment/).Real-Time Debugging:
SQL Query Inspection: Dump Eloquent query builders or raw queries:
$query = User::where('active', true)->toSql();
DumpViewer::dump($query, 'Raw SQL');
Collection/Model Rendering: Automatically formats collections and models with relationships:
$users = User::with('posts')->get();
DumpViewer::dump($users, 'Users with Posts');
Custom Views: Extend the viewer by publishing assets:
php artisan vendor:publish --tag=dump-viewer-assets
resources/views/vendor/dump-viewer/ to customize UI.Storage Overload:
dump_viewer_dumps table). Large or frequent dumps may bloat storage.DumpViewer::clear() to manually purge old dumps or set max_dumps in config.Performance Impact:
app()->environment('local') checks or disable in staging/prod.Label Collisions:
DumpViewer::dump($var, "Label-" . Str::uuid());
Tinker Visibility:
Middleware Conflicts:
/dump-viewer.Route::middleware(['web', 'dump-viewer'])->group(function () {
// Debug routes
});
Clear Dumps:
php artisan dump-viewer:clear
Filtering:
Dark Mode Issues:
Missing Dumps:
DUMP_VIEWER_ENABLED=true in .env.dump-viewer middleware is registered in app/Http/Kernel.php:
protected $middleware = [
// ...
\DevPortolio\DumpViewer\Middleware\DumpViewerMiddleware::class,
];
Custom Data Rendering:
DumpViewer::extend(function ($dumper) {
$dumper->handle(MyCustomClass::class, function ($value) {
return "Custom Render: " . $value->toJson();
});
});
Custom Storage:
Override the default database storage by binding a custom DumpStorage implementation:
$app->bind(\DevPortolio\DumpViewer\Contracts\DumpStorage::class, function () {
return new \App\Services\CustomDumpStorage();
});
Event Hooks: Listen for dump events to log or process dumps externally:
DumpViewer::dumping(function ($dump) {
Log::debug('Dump created:', ['label' => $dump->label, 'data' => $dump->data]);
});
Asset Overrides: Publish and modify the viewer’s Blade views or CSS/JS:
php artisan vendor:publish --tag=dump-viewer-assets
resources/views/vendor/dump-viewer/ or public/vendor/dump-viewer/.API Access:
Fetch dumps programmatically via the DumpViewer facade:
$dumps = DumpViewer::all();
$latest = DumpViewer::latest()->first();
Localization: Extend language support by publishing translations:
php artisan vendor:publish --tag=dump-viewer-translations
resources/lang/vendor/dump-viewer/ for multi-language support.How can I help you explore Laravel packages today?