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 smarter dump() for inspecting PHP variables, replacing var_dump() with rich, readable output. It can walk complex data structures, improving debugging in CLI and web contexts with configurable dumpers and casters.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation: Add to composer.json:

    composer require symfony/var-dumper
    

    Or for Laravel (via Symfony’s HttpFoundation or standalone):

    composer require symfony/var-dumper --dev
    
  2. First Use Case: Replace var_dump() or dd() with Symfony’s dump():

    use Symfony\Component\VarDumper\VarDumper;
    
    $user = User::find(1);
    VarDumper::dump($user); // Colorized, structured output in CLI or HTML (if Accept header allows)
    
  3. Where to Look First:

    • Official Documentation
    • Focus on VarDumper::dump() and VarDumper::cliff() (compact mode).
    • Explore casters (e.g., AbstractCloner::addDefaultCasters()) for custom objects.

Implementation Patterns

Core Workflows

  1. CLI Debugging: Use in Artisan commands, queues, or migrations:

    // In a custom Artisan command
    public function handle()
    {
        $data = $this->fetchData();
        VarDumper::dump($data); // Terminal output with colors
    }
    
  2. Web Debugging: Leverage Accept header for HTML/JSON output:

    // In a controller
    public function show(Request $request)
    {
        $data = ['user' => User::first()];
        VarDumper::dump($data); // Auto-detects HTML/JSON based on Accept header
    }
    
    • Tip: Force HTML output:
      VarDumper::setHandler(function ($var) {
          return new \Symfony\Component\VarDumper\Caster\HtmlDumper($var);
      });
      
  3. Testing: Replace var_dump in tests:

    public function testUserCreation()
    {
        $user = User::create([...]);
        VarDumper::dump($user->toArray()); // Debug test data
        $this->assertTrue(true);
    }
    
  4. Custom Casters: Extend for Laravel-specific objects (e.g., Eloquent models, Livewire components):

    use Symfony\Component\VarDumper\Caster\Caster;
    
    class EloquentModelCaster implements Caster
    {
        public function getType()
        {
            return 'eloquent_model';
        }
    
        public function castToString($value)
        {
            return sprintf('<info>%s</info> {#%d}', get_class($value), spl_object_id($value));
        }
    }
    
    // Register globally
    \Symfony\Component\VarDumper\Cloner\AbstractCloner::addDefaultCasters(new EloquentModelCaster());
    
  5. Environment Control: Disable in production via .env:

    if (!app()->environment('production')) {
        VarDumper::dump($sensitiveData); // Safe for staging/QA
    }
    

Integration Tips

  • Laravel Service Provider: Bind VarDumper globally for easy access:

    // app/Providers/AppServiceProvider.php
    public function boot()
    {
        if ($this->app->environment('local')) {
            $this->app->singleton('var_dumper', function () {
                return new \Symfony\Component\VarDumper\VarDumper();
            });
        }
    }
    

    Usage:

    app('var_dumper')->dump($data);
    
  • Middleware for Debug Routes: Restrict dump() to admin routes:

    // app/Http/Middleware/DebugMiddleware.php
    public function handle($request, Closure $next)
    {
        if ($request->user()->isAdmin() && $request->has('debug')) {
            VarDumper::dump($request->all());
        }
        return $next($request);
    }
    
  • Queue Job Debugging: Log dumps to a file or database:

    // In a queue job
    public function handle()
    {
        $data = $this->process();
        file_put_contents(storage_path('logs/debug_dump.log'), VarDumper::export($data), FILE_APPEND);
    }
    

Gotchas and Tips

Pitfalls

  1. Sensitive Data Leaks:

    • Risk: Accidental exposure of passwords, tokens, or PII in logs/terminal.
    • Fix: Use VarDumper::setMaxItems() or custom casters to mask sensitive fields:
      VarDumper::setMaxItems(10); // Limit nested depth
      
      Or override casters for Illuminate\Support\Collection:
      class SecureCollectionCaster implements Caster
      {
          public function castToString($value)
          {
              $data = $value->toArray();
              unset($data['password'], $data['api_token']);
              return VarDumper::export($data);
          }
      }
      
  2. Performance Overhead:

    • Risk: dump() can slow down CLI commands or queues.
    • Fix: Disable in production or use cliff() for compact output:
      VarDumper::cliff($data); // Faster, less verbose
      
  3. HTML Output Quirks:

    • Issue: HTML dumps may break layouts or interfere with JavaScript.
    • Fix: Force JSON or use a dedicated debug endpoint:
      header('Content-Type: application/json');
      echo VarDumper::export($data);
      
  4. Circular References:

    • Issue: Infinite loops when dumping circularly referenced objects (e.g., Eloquent models with belongsToMany).
    • Fix: Configure the cloner to handle cycles:
      $cloner = new \Symfony\Component\VarDumper\Cloner\VarCloner();
      $cloner->setMaxItems(50); // Prevent stack overflow
      VarDumper::setCloner($cloner);
      
  5. CLI Color Conflicts:

    • Issue: Colors may not render in all terminals (e.g., Windows CMD).
    • Fix: Use cliff() or force ANSI escape codes:
      putenv('TERM=xterm-256color'); // Ensure color support
      

Debugging Tips

  • Inspect Casters: List registered casters to debug why an object isn’t dumping correctly:

    $cloner = new \Symfony\Component\VarDumper\Cloner\VarCloner();
    print_r($cloner->getCasters());
    
  • Export to File: For complex data, export to a file for later inspection:

    file_put_contents(
        storage_path('logs/debug_dump.txt'),
        VarDumper::export($data, VarDumper::EXPORT_RAW)
    );
    
  • Override Default Handlers: Customize output format globally:

    VarDumper::setHandler(function ($var) {
        return new \Symfony\Component\VarDumper\Caster\JsonCaster($var);
    });
    

Extension Points

  1. Custom Dumper Classes: Extend \Symfony\Component\VarDumper\Dumper\AbstractDumper for custom output (e.g., Markdown, CSV):

    class MarkdownDumper extends AbstractDumper
    {
        protected function dumpScalar($value, $label = null)
        {
            return "**$label**: $value\n";
        }
    }
    
  2. Dynamic Caster Registration: Load casters dynamically based on environment:

    if (app()->environment('local')) {
        \Symfony\Component\VarDumper\Cloner\AbstractCloner::addDefaultCasters(
            new EloquentModelCaster(),
            new LivewireComponentCaster()
        );
    }
    
  3. Integrate with Laravel Debugbar: Use VarDumper as a backend for Laravel Debugbar:

    // In a Debugbar collector
    public function collect()
    {
        $this->data['var_dump'] = VarDumper::export($this->getData());
    }
    
  4. Support for Proprietary Objects: Add casters for packages like Filament, Nova, or Livewire:

    class FilamentResourceCaster implements Caster
    {
        public function getType()
        {
            return 'filament_resource';
        }
    
        public function castToString($value)
        {
            return sprintf(
                '<options=bold>%s</> Resource {#%d}',
                $value->getLabel(),
                spl_object_id($value)
            );
        }
    }
    

Configuration Quirks

  • Accept Header Handling: VarDum
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.
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope
anil/file-picker
broqit/fields-ai