Installation
Add to composer.json:
composer require beloop/analytics-bundle
Enable in config/bundles.php:
Beloop\AnalyticsBundle\BeloopAnalyticsBundle::class => ['all' => true],
First Use Case
Track a user event via the AnalyticsService:
use Beloop\AnalyticsBundle\Analytics\AnalyticsService;
class SomeController extends AbstractController
{
public function trackEvent(AnalyticsService $analytics): Response
{
$analytics->track('user_login', ['user_id' => 123]);
return new Response('Event tracked');
}
}
Configuration
Check config/packages/beloop_analytics.yaml for default providers (e.g., GoogleAnalytics, Mixpanel). Override as needed:
beloop_analytics:
providers:
google: ~ # Disabled by default
mixpanel: ~ # Disabled by default
Event Tracking
AnalyticsService::track() for standard events.
$analytics->track('course_completed', ['course_id' => 42, 'duration' => 3600]);
$analytics->setUserContext(['id' => $user->id, 'email' => $user->email]);
Provider Integration
google: true).AnalyticsProviderInterface:
class CustomProvider implements AnalyticsProviderInterface
{
public function track(string $event, array $properties): void
{
// Custom logic (e.g., API call)
}
}
Register via dependency injection:
services:
Beloop\AnalyticsBundle\Analytics\AnalyticsService:
arguments:
$providers: ['@custom_provider']
Batch Processing
AnalyticsService::flush() to send queued events (useful for offline scenarios).kernel.request) to auto-track routes:
$analytics->track('page_view', ['route' => $request->get('_route')]);
{{ dump(app('analytics').userContext) }}
AnalyticsService in tests:
$this->mock(AnalyticsService::class)->shouldReceive('track')->once();
Archived Package
Provider Configuration
google) are disabled by default. Explicitly enable in config.var/log/dev.log for provider errors (e.g., API key issues).Event Naming
user, page) to prevent conflicts with provider schemas.Performance
flush()) for bulk operations.BeloopAnalyticsBundle to dev mode in config/packages/dev/beloop_analytics.yaml:
beloop_analytics:
debug: true
Custom Event Transformers
Override AnalyticsService to modify events before sending:
class CustomAnalyticsService extends AnalyticsService
{
protected function transformEvent(string $event, array $properties): array
{
$properties['app_version'] = '1.0.0';
return parent::transformEvent($event, $properties);
}
}
Async Tracking Use Symfony Messenger to decouple tracking:
$message = new TrackEvent('user_signup', ['user_id' => 123]);
$this->messageBus->dispatch($message);
(Requires custom handler implementation.)
Environment-Specific Providers Dynamically enable providers based on environment:
beloop_analytics:
providers:
google: '%env(bool:GOOGLE_ANALYTICS_ENABLED)%'
How can I help you explore Laravel packages today?