papoon / inspector
Framework-agnostic service container inspector
Requires
- php: ^8.1
- illuminate/container: ^10.0
- symfony/console: ^6.4
- symfony/dependency-injection: ^6.4
- symfony/yaml: ^6.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.86
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2026-03-26 17:46:05 UTC
README
A powerful tool for inspecting, visualizing, and tracking mutations in PHP service containers (Laravel, Symfony, PSR-11).
Features
- Web dashboard for service inspection and visualization
- CLI commands for analysis and export
- Mutation tracking (bindings, aliases, etc.)
- Dependency graph export (Graphviz/D3.js)
- Service comparison across environments
- Tagged service listing
- Circular dependency and duplicate binding detection
Installation
composer require papoon/inspector --dev
Quick Start
Web Dashboard
php -S localhost:8000 -t public
Visit http://localhost:8000 in your browser.
CLI Usage
List services:
php bin/inspect inspector:list-services
Compare containers:
php bin/inspect inspector:compare-containers local staging prod
Export service map:
php bin/inspect inspector:export-map json
Usage in Laravel
-
Wrap your container with the Inspector adapter:
use Inspector\Adapters\LaravelAdapter; use Illuminate\Container\Container; $container = app(); $adapter = new LaravelAdapter($container);
-
Track mutations:
use Inspector\MutationEventDispatcher; $dispatcher = new MutationEventDispatcher(); $dispatcher->listen(function ($mutation) { logger()->info('Container mutation', $mutation); }); $adapter->setMutationDispatcher($dispatcher);
-
Use adapter methods for mutations:
$adapter->bind('foo', function () { return new Foo(); }); $adapter->alias('foo', 'bar');
-
Inspect services and mutations:
use Inspector\Inspector; $inspector = new Inspector($adapter); $services = $inspector->browseServices(); $mutations = $inspector->getMutations();
Usage in Symfony
-
Wrap your container with the Inspector adapter:
use Inspector\Adapters\SymfonyAdapter; use Symfony\Component\DependencyInjection\ContainerBuilder; $container = $this->container; $adapter = new SymfonyAdapter($container);
-
Track mutations:
use Inspector\MutationEventDispatcher; $dispatcher = new MutationEventDispatcher(); $dispatcher->listen(function ($mutation) { // Log or display mutation events }); $adapter->setMutationDispatcher($dispatcher);
-
Use adapter methods for mutations:
$adapter->setDefinition('foo', new Definition(Foo::class)); $adapter->removeDefinition('foo');
-
Inspect services and mutations:
use Inspector\Inspector; $inspector = new Inspector($adapter); $services = $inspector->browseServices(); $mutations = $inspector->getMutations();
Test Coverage
To generate a coverage report locally:
vendor/bin/phpunit --coverage-html coverage
Open coverage/index.html in your browser to view the report.
Contributing
Pull requests and issues are welcome!
Please ensure all code is covered by tests and passes CI.
License
MIT