Installation
composer require daemon8/symfony
Add the bundle to your config/bundles.php:
return [
// ...
Daemon8\Symfony\Daemon8Bundle::class => ['all' => true],
];
Configuration Publish the default config:
php bin/console daemon8:install
Update config/packages/daemon8.yaml with your API key and environment settings.
First Use Case Enable automatic event observation for a controller:
use Daemon8\Symfony\Attribute\Observe;
#[Observe]
class UserController extends AbstractController
{
#[Route('/users', name: 'user_list')]
public function list(): Response
{
// Your logic here
}
}
The user_list endpoint will now automatically send runtime events to Daemon8.
Attribute-Based Observation
Use the #[Observe] attribute on classes or methods to enable automatic event capture:
#[Observe]
class ProductService {
#[Observe] // Optional: Fine-grained control
public function update(Product $product): void { ... }
}
Event Filtering
Configure which events to capture in daemon8.yaml:
daemon8:
events:
enabled: ['http_request', 'http_response', 'exception']
excluded_methods: ['_internal.*']
Manual Event Dispatching For non-attribute-based cases, manually dispatch events:
use Daemon8\Symfony\Daemon8;
public function someAction(): void {
$event = new HttpRequestEvent($request);
Daemon8::dispatch($event);
}
Middleware Integration Extend existing middleware to inject Daemon8 context:
public function handle(Request $request, Closure $next): Response {
Daemon8::setContext(['user_id' => $request->attributes->get('user_id')]);
return $next($request);
}
Command-Line Observability
Enable CLI event capture in daemon8.yaml:
daemon8:
cli_events: true
Performance Overhead
daemon8:
enabled: '%kernel.debug%'
Attribute Conflicts
#[Observe] is the last attribute on a method/class to avoid parsing issues.Sensitive Data Leakage
Daemon8::setContext() for sanitized data:
Daemon8::setContext(['user_id' => $user->id]);
Event Throttling
#[Observe(throttle: 10)] to batch events.Symfony Version Compatibility
Log Events Locally
Enable debug logging in daemon8.yaml:
daemon8:
debug: true
Check var/log/dev.log for dispatched events.
Validate API Key
Use php bin/console daemon8:validate to test connectivity.
Inspect Subscribers List active subscribers:
php bin/console debug:event-dispatcher daemon8
Custom Event Types
Extend Daemon8\Symfony\Event\AbstractEvent to create domain-specific events:
class OrderProcessedEvent extends AbstractEvent {
public function __construct(private Order $order) {}
public function getOrder(): Order { return $this->order; }
}
Event Transformers
Override event serialization in config/packages/daemon8.yaml:
daemon8:
transformers:
App\Event\CustomEvent: App\Daemon8\CustomEventTransformer
Async Dispatching Use Symfony Messenger to decouple event dispatching:
daemon8:
async: true
Conditional Observation Dynamically enable/disable observation via a service:
Daemon8::setEnabled(false); // Disable globally
How can I help you explore Laravel packages today?