raulfraile/ladybug
Ladybug is an extensible var_dump/print_r replacement for PHP 5.3+ that renders any variable, object, or resource in a clean, readable format. Simple global helper (ladybug_dump) with solid docs and framework integrations.
Installation:
composer require raulfraile/ladybug
Add to composer.json if not using Composer:
"require": {
"raulfraile/ladybug": "^1.0"
}
Basic Usage:
use Ladybug\Dumper;
$data = ['user' => ['name' => 'John', 'active' => true]];
Dumper::dump($data); // Outputs formatted dump to stdout
First Use Case:
Replace var_dump() or dd() for debugging complex objects/arrays in Laravel:
// Instead of:
dd($this->user->toArray());
// Use:
Dumper::dump($this->user->toArray());
vendor/raulfraile/ladybug/src/Ladybug/Dumper.php (Core class)vendor/raulfraile/ladybug/src/Ladybug/Renderer.php (Output formatting)vendor/raulfraile/ladybug/tests/ (Usage examples)Replacing dd():
// In controllers/services:
Dumper::dump($this->fetchUserData(), true); // `true` exits after dump
Logging Debug Data:
use Illuminate\Support\Facades\Log;
Log::debug(Dumper::dump($this->query->getBindings()));
Custom Dump Middleware (for API responses):
// app/Http/Middleware/DebugDumper.php
public function handle($request, Closure $next) {
if ($request->has('debug')) {
Dumper::dump($request->all());
exit;
}
return $next($request);
}
Laravel Service Provider:
// app/Providers/AppServiceProvider.php
public function boot() {
if (app()->environment('local')) {
Dumper::setRenderer(new \Ladybug\Renderer\HtmlRenderer());
}
}
Blade Debugging:
@php
Dumper::dump($loop->items);
@endphp
Artisan Commands:
// app/Console/Commands/DebugCommand.php
public function handle() {
$data = Cache::get('debug:data');
Dumper::dump($data);
}
Custom Renderers:
class JsonRenderer extends \Ladybug\Renderer\Renderer {
public function render($data) {
return json_encode($data, JSON_PRETTY_PRINT);
}
}
Dumper::setRenderer(new JsonRenderer());
Hooking into Laravel Events:
Event::listen('eloquent.updated:*', function ($model) {
if (app()->environment('local')) {
Dumper::dump($model->getChanges());
}
});
Performance Impact:
if (app()->environment('local')).Recursive Data Issues:
Dumper::dump($data, 5) to limit depth.Output Buffering:
--no-ansi).ob_start() or force raw output:
Dumper::dump($data, false, true); // 3rd param: force raw
Inspecting Requests:
Dumper::dump([
'headers' => $request->header(),
'input' => $request->all(),
'files' => $request->file()->all(),
]);
Database Queries:
$query = User::query()->where('active', true);
Dumper::dump($query->toSql(), $query->getBindings());
View Debugging:
// In a view:
@php
Dumper::dump($this->getDebugData());
@endphp
Renderer Overrides:
Symfony\VarDumper\Cloner\VarCloner.Ladybug\Renderer\Renderer for custom formats.Max Depth:
10. Adjust via:
Dumper::setMaxDepth(15);
Handling Exceptions:
try-catch with Dumper to avoid crashes:
try {
$result = $this->riskyOperation();
Dumper::dump($result);
} catch (\Exception $e) {
Dumper::dump($e->getTrace());
throw $e;
}
Custom Handlers:
Dumper::addHandler('App\Models\User', function ($user) {
return [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
];
});
Filtering Sensitive Data:
Dumper::setFilter(function ($data) {
if (is_array($data) && isset($data['password'])) {
$data['password'] = '[FILTERED]';
}
return $data;
});
Integration with Laravel Debugbar:
// In a service provider:
$debugbar = app(\Barryvdh\Debugbar\Debugbar::class);
$debugbar->addCollector(new class extends \Barryvdh\Debugbar\Collector\Collector {
public function collect() {
return [
'ladybug' => Dumper::dump($this->getData()),
];
}
});
How can I help you explore Laravel packages today?