Weave 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

Symfony Laravel Package

daemon8/symfony

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require daemon8/symfony
    

    Add the bundle to your config/bundles.php:

    return [
        // ...
        Daemon8\Symfony\Daemon8Bundle::class => ['all' => true],
    ];
    
  2. Configuration Publish the default config:

    php bin/console daemon8:install
    

    Update config/packages/daemon8.yaml with your API key and environment settings.

  3. 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.


Implementation Patterns

Common Workflows

  1. 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 { ... }
    }
    
  2. Event Filtering Configure which events to capture in daemon8.yaml:

    daemon8:
        events:
            enabled: ['http_request', 'http_response', 'exception']
            excluded_methods: ['_internal.*']
    
  3. 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);
    }
    
  4. 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);
    }
    
  5. Command-Line Observability Enable CLI event capture in daemon8.yaml:

    daemon8:
        cli_events: true
    

Gotchas and Tips

Pitfalls

  1. Performance Overhead

    • Disable in production if not needed:
      daemon8:
          enabled: '%kernel.debug%'
      
    • Exclude heavy methods from observation.
  2. Attribute Conflicts

    • Ensure #[Observe] is the last attribute on a method/class to avoid parsing issues.
  3. Sensitive Data Leakage

    • Avoid sending raw request/response bodies to Daemon8. Use Daemon8::setContext() for sanitized data:
      Daemon8::setContext(['user_id' => $user->id]);
      
  4. Event Throttling

    • High-frequency events (e.g., in loops) may trigger rate limits. Use #[Observe(throttle: 10)] to batch events.
  5. Symfony Version Compatibility

    • The package targets Symfony 5.4+. Test thoroughly if using older versions.

Debugging Tips

  1. Log Events Locally Enable debug logging in daemon8.yaml:

    daemon8:
        debug: true
    

    Check var/log/dev.log for dispatched events.

  2. Validate API Key Use php bin/console daemon8:validate to test connectivity.

  3. Inspect Subscribers List active subscribers:

    php bin/console debug:event-dispatcher daemon8
    

Extension Points

  1. 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; }
    }
    
  2. Event Transformers Override event serialization in config/packages/daemon8.yaml:

    daemon8:
        transformers:
            App\Event\CustomEvent: App\Daemon8\CustomEventTransformer
    
  3. Async Dispatching Use Symfony Messenger to decouple event dispatching:

    daemon8:
        async: true
    
  4. Conditional Observation Dynamically enable/disable observation via a service:

    Daemon8::setEnabled(false); // Disable globally
    
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.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels