Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Var Dumper Laravel Package

symfony/var-dumper

Symfony VarDumper provides a powerful dump() replacement for var_dump(), with smart variable inspection and rich output for debugging PHP applications. Walks complex data structures safely, improving readability and developer productivity.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation:

    composer require symfony/var-dumper
    

    For Laravel projects, this is often included as a dependency of other Symfony components (e.g., symfony/debug-bundle or symfony/framework-bundle).

  2. First Use: Replace var_dump() or dd() with Symfony’s dump():

    use Symfony\Component\VarDumper\VarDumper;
    
    $user = User::find(1);
    VarDumper::dump($user); // Outputs formatted, colorized data to CLI or HTML
    
  3. Where to Look First:

    • Documentation: Symfony VarDumper Component
    • Key Classes:
      • VarDumper (main facade for dump() and cliff() methods).
      • Cloner\AbstractCloner (for custom casters).
      • Dumper\DumperInterface (for output formatting).
    • Laravel Integration: If using Laravel, check vendor/symfony/var-dumper for standalone usage or leverage dd() (which uses VarDumper under the hood).

First Use Case: Debugging Eloquent Models

use Symfony\Component\VarDumper\VarDumper;

// In a controller or service
$user = User::with('posts.comments')->find(1);
VarDumper::dump($user); // Shows nested relationships with collapsible sections

Why?

  • Replaces var_dump($user) with a readable, interactive output.
  • Supports collapsible arrays/objects (click to expand in CLI/HTML).
  • Highlights keys, types, and references (e.g., => for object references).

Implementation Patterns

Core Workflows

1. Replacing var_dump() and dd()

  • CLI/Artisan:
    VarDumper::dump($this->getSomeData()); // Colorized terminal output
    
  • Web (HTML Output):
    VarDumper::dump($request->all()); // Renders as collapsible HTML
    
  • Laravel Shortcut: Use Laravel’s dd() (which internally uses VarDumper):
    dd($user->posts); // Automatically dumps and dies
    

2. Customizing Output Format

  • Force CLI Output (even in web context):
    VarDumper::setHandler(function ($var) {
        echo VarDumper::dump($var, true); // `true` for CLI format
    });
    
  • Disable Colors (for logs or non-terminal output):
    VarDumper::setColors(false);
    

3. Debugging in Laravel Middleware/Events

  • Log Debug Data:
    use Symfony\Component\VarDumper\VarDumper;
    
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        if ($request->query('debug')) {
          VarDumper::dump($response->getContent());
        }
        return $response;
    }
    
  • Event Listeners:
    public function handle(JobProcessed $event)
    {
        if (app()->environment('local')) {
            VarDumper::dump($event->job->payload());
        }
    }
    

4. Integrating with Testing

  • PestPHP/Laravel:
    use Symfony\Component\VarDumper\VarDumper;
    
    it('validates user creation', function () {
        $user = User::factory()->create();
        VarDumper::dump($user->toArray()); // Debug test data
        expect($user->email)->toBe('test@example.com');
    });
    
  • PHPUnit:
    public function testSomething()
    {
        $result = $this->service->process();
        VarDumper::dump($result); // Debug test output
        $this->assertTrue($result);
    }
    

5. CLI Command Debugging

  • Artisan Commands:
    use Symfony\Component\VarDumper\VarDumper;
    
    protected function handle()
    {
        $data = $this->getDataFromSomewhere();
        VarDumper::dump($data); // Colorized CLI output
    }
    
  • Queue Workers:
    public function handle()
    {
        $payload = $this->job->payload();
        if (app()->environment('local')) {
            VarDumper::dump($payload);
        }
        // Process job...
    }
    

Integration Tips

Laravel-Specific Patterns

  1. Override dd() Globally: Add to AppServiceProvider:

    use Symfony\Component\VarDumper\VarDumper;
    
    public function boot()
    {
        if ($this->app->environment('local')) {
            \Illuminate\Support\Facades\Facade::clearResolvedInstance('dump');
            \Illuminate\Support\Facades\Facade::setFacadeApplication($this->app);
        }
    }
    

    Now dd() uses VarDumper’s enhanced output.

  2. Custom Debug Routes:

    Route::get('/debug', function () {
        if (auth()->check() && auth()->user()->isAdmin()) {
            VarDumper::dump(request()->all());
        }
        return response('Debug data shown in CLI/HTML');
    })->name('debug.data');
    
  3. Queue Job Debugging: Use App\Jobs\DebugJob:

    public function handle()
    {
        if (app()->environment('local')) {
            VarDumper::dump($this->data);
        }
        // Process job...
    }
    

Extending VarDumper

  1. Add Custom Casters (for Eloquent, Livewire, etc.):

    use Symfony\Component\VarDumper\Cloner\AbstractCloner;
    
    AbstractCloner::addDefaultCasters(function (AbstractCloner $cloner) {
        $cloner->addCaster('App\Models\User', function ($user) {
            return [
                'id' => $user->id,
                'name' => $user->name,
                'email' => $user->email,
                'posts_count' => $user->posts()->count(),
            ];
        });
    });
    
  2. Handle Sensitive Data:

    AbstractCloner::addDefaultCasters(function (AbstractCloner $cloner) {
        $cloner->addCaster('stdClass', function ($data) {
            if (isset($data->password)) {
                $data->password = '[FILTERED]';
            }
            return $data;
        });
    });
    

Gotchas and Tips

Pitfalls

  1. Output Buffering Issues:

    • Problem: VarDumper output may not appear if buffers are enabled (e.g., in Laravel middleware).
    • Fix: Use ob_start() or flush():
      ob_start();
      VarDumper::dump($data);
      echo ob_get_clean();
      
  2. HTML vs. CLI Detection:

    • Problem: VarDumper auto-detects output format, but may fail in edge cases (e.g., API requests with Accept: */*).
    • Fix: Force format explicitly:
      VarDumper::dump($data, true); // Force CLI format
      // or
      VarDumper::dump($data, false, true); // Force HTML format
      
  3. Performance in Loops:

    • Problem: Calling VarDumper::dump() in tight loops (e.g., migrations) can slow execution.
    • Fix: Disable in production or use conditional checks:
      if (!app()->runningInConsole() && !app()->environment('local')) {
          return;
      }
      VarDumper::dump($data);
      
  4. Circular References:

    • Problem: Deeply nested objects with circular references may cause stack overflows.
    • Fix: Limit depth or use VarDumper::setMaxItems():
      VarDumper::setMaxItems(100); // Limit output size
      
  5. Sensitive Data Leaks:

    • Problem: Accidental dumping of passwords, tokens, or PII in logs/CLI.
    • Fix: Use casters to filter sensitive fields (see Extending VarDumper above).

Debugging Tips

  1. Inspecting Requests/Responses:
    • Request:
      VarDumper::dump(request()->headers->all());
      VarDumper::dump(request()->query());
      VarDumper::dump(request()->input());
      
    • Response:
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codraw/framework-extra-bundle
codraw/messenger
codraw/security
codraw/mailer
codraw/contracts
codraw/profiling
codraw/dependency-injection
codraw/tester
codraw/core
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony