Event Reference
Complete reference of events available in PteroCA for plugin development.
Overview
PteroCA uses an event-driven architecture based on Symfony's EventDispatcher component. The system contains 277+ events covering all major operations, allowing plugins to react to system changes, extend functionality, and integrate deeply with core features.
Event-Driven Architecture
Benefits:
Loose coupling - Plugins don't depend on core code directly
Extensibility - Multiple plugins can respond to same event
Maintainability - Clean separation of concerns
Flexibility - Add functionality without modifying core
How it works:
Core system dispatches events when significant actions occur
Event subscribers (listeners) registered by plugins receive events
Subscribers can read event data and take actions
Multiple subscribers can respond to the same event
Event Categories
PteroCA events are organized into logical categories:
User Events
~20
User registration, login, profile changes
Server Events
~45
Server lifecycle, configuration, management
Payment Events
~12
Payment processing, transactions, refunds
Product Events
~10
Product management, pricing changes
Order Events
~8
Order placement, processing, completion
Plugin Events
~15
Plugin lifecycle, activation, configuration
Theme Events
~15
Theme management, activation, settings
Admin Events
~12
Administrative actions, settings changes
CRUD Events
~140
Entity create, update, delete operations
Using Events in Plugins
Event Subscriber
Create an event subscriber class:
Registering Subscriber
In services.yaml:
Event Priority
Control execution order with priority (higher = earlier):
Priority guidelines:
10to100- High priority (run early)0- Normal priority (default)-10to-100- Low priority (run late)
Core Event Categories
User Events
Events related to user accounts and authentication.
UserRegisteredEvent
New user registration
$user
UserUpdatedEvent
User profile updated
$user, $previousData
UserDeletedEvent
User account deleted
$userId, $user
UserEmailVerifiedEvent
Email address verified
$user
UserPasswordChangedEvent
Password changed
$user
UserBalanceChangedEvent
Wallet balance changed
$user, $oldBalance, $newBalance, $transaction
UserLoginEvent
User logged in
$user, $request
UserLogoutEvent
User logged out
$user
User2FAEnabledEvent
Two-factor auth enabled
$user
User2FADisabledEvent
Two-factor auth disabled
$user
Example: Welcome email on registration
Server Events
Events for server lifecycle and management.
ServerCreatedEvent
New server created
$server, $user
ServerUpdatedEvent
Server configuration changed
$server, $previousData
ServerDeletedEvent
Server deleted
$serverId, $server
ServerSuspendedEvent
Server suspended
$server, $reason
ServerUnsuspendedEvent
Server unsuspended
$server
ServerRenewedEvent
Server renewed
$server, $period, $payment
ServerExpiredEvent
Server expired
$server
ServerInstallingEvent
Server installation started
$server
ServerInstalledEvent
Server installation completed
$server
ServerInstallFailedEvent
Server installation failed
$server, $error
ServerTransferredEvent
Server ownership transferred
$server, $fromUser, $toUser
ServerEggChangedEvent
Server egg changed
$server, $oldEgg, $newEgg
Example: Notify user when server expires
Payment Events
Events for payment processing and transactions.
PaymentCreatedEvent
Payment session created
$payment
PaymentCompletedEvent
Payment successfully processed
$payment, $user
PaymentFailedEvent
Payment failed
$payment, $reason
PaymentCancelledEvent
Payment cancelled by user
$payment
PaymentRefundedEvent
Payment refunded
$payment, $refund
BalanceAddedEvent
Balance manually added
$user, $amount, $admin
BalanceDeductedEvent
Balance manually deducted
$user, $amount, $admin
VoucherRedeemedEvent
Voucher code used
$voucher, $user
Example: Track successful payments
Product Events
Events related to product management.
ProductCreatedEvent
New product created
$product
ProductUpdatedEvent
Product modified
$product, $previousData
ProductDeletedEvent
Product deleted
$productId, $product
ProductActivatedEvent
Product made active
$product
ProductDeactivatedEvent
Product made inactive
$product
ProductPriceChangedEvent
Product pricing updated
$product, $oldPrice, $newPrice
CategoryCreatedEvent
Category created
$category
CategoryUpdatedEvent
Category modified
$category, $previousData
CategoryDeletedEvent
Category deleted
$categoryId, $category
Example: Sync products to external system
Order Events
Events for order processing.
OrderCreatedEvent
New order placed
$order, $user
OrderUpdatedEvent
Order modified
$order, $previousData
OrderCompletedEvent
Order fulfilled
$order
OrderCancelledEvent
Order cancelled
$order, $reason
OrderPaidEvent
Order payment received
$order, $payment
Example: Send order confirmation
Plugin Events
Events for plugin lifecycle management.
PluginInstalledEvent
Plugin installed
$plugin
PluginUninstalledEvent
Plugin uninstalled
$pluginIdentifier
PluginEnabledEvent
Plugin activated
$plugin
PluginDisabledEvent
Plugin deactivated
$plugin
PluginUpdatedEvent
Plugin updated to new version
$plugin, $oldVersion, $newVersion
PluginConfiguredEvent
Plugin settings changed
$plugin, $settings
Example: Initialize plugin data on enable
Theme Events
Events for theme management.
ThemeInstalledEvent
Theme installed
$theme
ThemeUninstalledEvent
Theme uninstalled
$themeIdentifier
ThemeActivatedEvent
Theme set as active
$theme
ThemeDeactivatedEvent
Theme deactivated
$theme
ThemeUpdatedEvent
Theme updated
$theme, $oldVersion, $newVersion
ThemeConfiguredEvent
Theme settings changed
$theme, $settings
Admin Events
Events for administrative actions.
SettingsChangedEvent
System settings updated
$key, $oldValue, $newValue, $admin
AdminActionEvent
Administrative action performed
$action, $admin, $target, $data
UserPromotedEvent
User given admin privileges
$user, $admin
UserDemotedEvent
User admin privileges revoked
$user, $admin
Example: Log admin actions
CRUD Events
EasyAdmin generates events for all entity operations.
Event Pattern
For each entity, events follow this pattern:
Common CRUD Entities
User
UserPrePersistEvent
UserPreUpdateEvent
UserPreRemoveEvent
Server
ServerPrePersistEvent
ServerPreUpdateEvent
ServerPreRemoveEvent
Product
ProductPrePersistEvent
ProductPreUpdateEvent
ProductPreRemoveEvent
Payment
PaymentPrePersistEvent
PaymentPreUpdateEvent
PaymentPreRemoveEvent
Order
OrderPrePersistEvent
OrderPreUpdateEvent
OrderPreRemoveEvent
Pre vs Post Events
Pre Events (before database operation):
Validate data
Modify entity before save
Cancel operation (throw exception)
Set default values
Post Events (after database operation):
Trigger side effects
Send notifications
Update external systems
Log changes
Example: Validate before server creation
Example: Notify after server update
Advanced Event Patterns
Stopping Event Propagation
Prevent other listeners from processing an event:
Conditional Event Handling
Async Event Processing
For long-running tasks, use message queue:
Event Data Access
Creating Custom Events
Plugins can define and dispatch custom events.
Define Event Class
Dispatch Custom Event
Subscribe to Custom Event
Best Practices
Error Handling
Always handle errors in event subscribers:
Performance Considerations
Do:
Keep event handlers fast
Queue heavy operations
Cache frequently accessed data
Use lazy loading
Don't:
Make external API calls synchronously
Perform complex calculations
Query large datasets
Block for extended periods
Logging
Log important events for debugging:
Testing Event Subscribers
Documentation
Document your event subscribers:
Troubleshooting
Event Not Firing
Check:
Subscriber registered in
services.yamlEvent class name correct (including namespace)
Subscriber tagged with
kernel.event_subscriberPlugin enabled
Handler Not Called
Check:
Method name matches in
getSubscribedEvents()Event dispatcher injected properly
No exceptions thrown in previous handlers
Propagation not stopped by earlier handler
Multiple Handlers Conflict
Use priority:
Performance Issues
Profile event handlers:
Optimize:
Move heavy work to message queue
Cache results
Reduce database queries
Profile with Blackfire/Xdebug
Related Guides
Event System - Basic event system usage
Bootstrap & Lifecycle - Plugin initialization
Best Practices - Plugin development guidelines
Testing - Testing event subscribers
Symfony Events - Symfony EventDispatcher documentation
Additional Resources
Symfony EventDispatcher - https://symfony.com/doc/current/event_dispatcher.html
Event Naming Conventions - Use clear, descriptive names in past tense
Event Documentation - Document custom events in plugin README
Performance Monitoring - Track event handler execution times
Last updated