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 Exporter

Var Exporter Laravel Package

symfony/var-exporter

Exports serializable PHP values to fast, OPcache-friendly PHP code, preserving serialization semantics and references. Includes DeepCloner for efficient deep cloning and ProxyHelper to generate lazy-loading proxies; uses ext-deepclone (or polyfill) for speed.

View on GitHub
Deep Wiki
Context7

Provides tools to export, instantiate, hydrate, clone and lazy-load PHP objects

Frequently asked questions about Var Exporter
How can I use Symfony VarExporter to debug Eloquent models in Laravel?
Use `VarExporter::export()` to dump entire model graphs, including relationships, accessors, and mutators, as executable PHP code. Replace `dd($user)` with `dd(VarExporter::export($user))` for human-readable, OPcache-optimized output. This preserves object semantics (e.g., `__wakeup`, `__sleep`) and avoids `PHP_Incomplete_Class` issues.
Does VarExporter work with Laravel’s service container or bound services?
Yes. Use `DeepCloner::deepClone()` to duplicate services (e.g., repositories, factories) without constructor overhead, or lazy-load them with `LazyProxyTrait` to defer expensive initialization. This is useful for testing or caching services in Laravel’s container.
Is Symfony VarExporter faster than Laravel’s native `serialize()` for debugging?
Yes, but for different reasons. `VarExporter::export()` generates OPcache-friendly PHP code, which loads faster than `unserialize()`. However, it’s slower to generate than `serialize()`. Benchmark in Laravel’s CLI tasks—use it for debugging, not production serialization.
Will VarExporter break if my Laravel app uses PHP 8.1 (Laravel 9) or older?
The package supports PHP 7.4+ (Laravel 9+), but some features (e.g., readonly property hydration) require PHP 8.2+. Test with `deepclone_hydrate()` for complex objects. If using PHP 8.1, ensure the `symfony/polyfill-deepclone` fallback is installed via Composer.
Can I use VarExporter to seed test databases or mock objects in Laravel?
Absolutely. Export complex objects (e.g., `VarExporter::export($userWithPosts)`) and include them in test fixtures. This avoids manual mocking and ensures test data matches production object states. Works well with Laravel’s `DatabaseSeeder` or `DataFactory` patterns.
How do I handle circular references in Eloquent models or Laravel collections?
VarExporter handles circular references natively, but Laravel’s `SplObjectStorage` (e.g., in event listeners) or `ArrayObject` (collections) may need explicit testing. Use `SplObjectStorage::serialize()` or `ArrayObject::getFlags()` to validate edge cases before relying on exports in production.
Should I replace Laravel’s `serialize()` with VarExporter for caching?
No. Use `VarExporter` only for debugging or development—it’s not optimized for production caching. Laravel’s `serialize()` or `igbinary` is faster for storage, while VarExporter’s OPcache benefits shine during development. For caches, stick to Laravel’s built-in methods.
What’s the performance impact of using DeepCloner vs. `unserialize(serialize())` in Laravel?
DeepCloner is ~2x faster and uses less memory than `unserialize(serialize())` due to PHP’s copy-on-write optimizations. Benchmark with `memory_get_usage()` in Laravel’s queue workers or CLI tasks. The `ext-deepclone` PECL extension further improves performance—install it if polyfill speed is critical.
Can I integrate VarExporter with Laravel Debugbar or Tinker?
Yes. Create a custom Debugbar collector to dump exported objects (e.g., `Debugbar::info(VarExporter::export($model))`). In Tinker, replace `dd()` with `dd(VarExporter::export($object))` for inspectable, replayable output. Example: `php artisan tinker --export=VarExporter`.
Are there alternatives to VarExporter for Laravel debugging?
For debugging, consider `spatie/laravel-debugbar` (UI-based) or `barryvdh/laravel-debugbar` (legacy). For serialization, `igbinary` is faster but lacks human-readable output. VarExporter uniquely combines OPcache optimization, deep cloning, and lazy loading—ideal for complex Laravel object graphs.
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