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:

  1. Core system dispatches events when significant actions occur

  2. Event subscribers (listeners) registered by plugins receive events

  3. Subscribers can read event data and take actions

  4. Multiple subscribers can respond to the same event

Event Categories

PteroCA events are organized into logical categories:

Category
Events
Purpose

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:

  • 10 to 100 - High priority (run early)

  • 0 - Normal priority (default)

  • -10 to -100 - Low priority (run late)

Core Event Categories

User Events

Events related to user accounts and authentication.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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.

Event
When Fired
Properties

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

Entity
Create
Update
Delete

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:

  1. Subscriber registered in services.yaml

  2. Event class name correct (including namespace)

  3. Subscriber tagged with kernel.event_subscriber

  4. Plugin enabled

Handler Not Called

Check:

  1. Method name matches in getSubscribedEvents()

  2. Event dispatcher injected properly

  3. No exceptions thrown in previous handlers

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

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