EventSystem Service
The EventSystem service provides comprehensive CRUD operations and dynamic event management functionality for Laravel Event System. You can use it directly via the service class or through the convenient Facade.
Namespace
JobMetric\EventSystem\EventSystem
Facade
For convenience, you can use the EventSystem Facade:
use JobMetric\EventSystem\Facades\EventSystem;
Basic CRUD Operations
Store
Create a new event-listener binding.
use JobMetric\EventSystem\Facades\EventSystem;
$response = EventSystem::store([
'name' => 'user.created',
'description' => 'Send welcome email when user registers',
'event' => App\Events\UserCreated::class,
'listener' => App\Listeners\SendWelcomeEmail::class,
'priority' => 10,
'status' => true,
]);
Available Fields:
name(string, required): Unique name identifier for the event bindingdescription(string, nullable): Optional descriptionevent(string, required): Fully qualified event class namelistener(string, required): Fully qualified listener class namepriority(int, nullable): Execution priority (default: 0)status(bool): Active status (default: true)
Minimal Example:
$response = EventSystem::store([
'name' => 'order.completed',
'event' => App\Events\OrderCompleted::class,
'listener' => App\Listeners\SendOrderConfirmation::class,
]);
Query
Build a query builder instance with filtering, sorting, and selected fields.
$query = EventSystem::query(['status' => true])
->where('priority', '>', 5)
->orderBy('priority', 'desc');
$events = $query->get();
Available Filters:
All fields can be filtered: id, name, description, event, listener, priority, status, created_at, updated_at
Example:
// Filter by status
$activeEvents = EventSystem::query(['status' => true])->get();
// Filter by event class
$userEvents = EventSystem::query(['event' => App\Events\UserCreated::class])->get();
// Complex filtering
$events = EventSystem::query()
->where('status', true)
->where('priority', '>', 5)
->orderBy('priority', 'desc')
->get();
All
Return all event system records without pagination.
$events = EventSystem::all();
// With filters
$activeEvents = EventSystem::all(['status' => true]);
Paginate
Return a paginated collection of event system records.
$events = EventSystem::paginate();
// With filters and custom page limit
$events = EventSystem::paginate(['status' => true], 20);
Returns: LengthAwarePaginator
Delete
Delete an event system record by its unique name.
$response = EventSystem::delete('user.created');
Events Fired:
EventSystemDeletingEvent- Before deletionEventSystemDeletedEvent- After deletion
Toggle Status
Toggle the boolean 'status' field of a given event system record.
$response = EventSystem::toggleStatus($eventId);
Example:
// Disable an event
$response = EventSystem::toggleStatus($eventId);
// Re-enable it later
$response = EventSystem::toggleStatus($eventId);
Response Format
All methods return a Response object with the following structure:
Response::make(
bool $success,
string $message,
mixed $data = null,
int $code = 200
)
Example Response:
[
'success' => true,
'message' => 'Event system entry created successfully',
'data' => [
'id' => 1,
'name' => 'user.created',
'description' => 'Send welcome email',
'event' => 'App\\Events\\UserCreated',
'listener' => 'App\\Listeners\\SendWelcomeEmail',
'priority' => 10,
'status' => true,
'created_at' => '2024-01-01 12:00:00',
'updated_at' => '2024-01-01 12:00:00',
],
'code' => 201
]
Events
The service fires the following events:
EventSystemStoredEvent
Fired after successfully storing a new event system entry.
Payload:
$event(Event): The created event model$data(array): The validated input data
EventSystemDeletingEvent
Fired before deleting an event system entry.
Payload:
$event(Event): The event model being deleted
EventSystemDeletedEvent
Fired after successfully deleting an event system entry.
Payload:
$event(Event): The deleted event model
Cache Management
The service automatically clears the cache after create, update, and delete operations:
cache()->forget('events');
Complete Examples
Register Multiple Events
use JobMetric\EventSystem\Facades\EventSystem;
$events = [
[
'name' => 'user.created',
'description' => 'Send welcome email',
'event' => App\Events\UserCreated::class,
'listener' => App\Listeners\SendWelcomeEmail::class,
'priority' => 10,
],
[
'name' => 'order.completed',
'description' => 'Send order confirmation',
'event' => App\Events\OrderCompleted::class,
'listener' => App\Listeners\SendOrderConfirmation::class,
'priority' => 5,
],
];
foreach ($events as $eventData) {
$response = EventSystem::store($eventData);
if (!$response->isSuccess()) {
Log::error('Failed to register event', [
'event' => $eventData['name'],
'errors' => $response->getErrors(),
]);
}
}
Admin Interface
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use JobMetric\EventSystem\Facades\EventSystem;
use Illuminate\Http\Request;
class EventSystemController extends Controller
{
public function index(Request $request)
{
$events = EventSystem::paginate(
filter: $request->only(['status', 'event', 'listener']),
page_limit: $request->get('per_page', 15)
);
return view('admin.events.index', compact('events'));
}
public function store(Request $request)
{
$response = EventSystem::store($request->all());
if ($response->isSuccess()) {
return redirect()->route('admin.events.index')
->with('success', $response->getMessage());
}
return back()->withErrors($response->getErrors());
}
public function toggleStatus(int $id)
{
$response = EventSystem::toggleStatus($id);
return response()->json($response->toArray());
}
public function destroy(string $name)
{
$response = EventSystem::delete($name);
if ($response->isSuccess()) {
return redirect()->route('admin.events.index')
->with('success', $response->getMessage());
}
return back()->withErrors($response->getErrors());
}
}
Plugin System
class EmailPlugin
{
public function install(): void
{
EventSystem::store([
'name' => 'plugin.email.user.created',
'event' => App\Events\UserCreated::class,
'listener' => EmailPlugin\Listeners\SendWelcomeEmail::class,
'priority' => 10,
'status' => true,
]);
}
public function uninstall(): void
{
EventSystem::delete('plugin.email.user.created');
}
}
Related Documentation
- DomainEvent - Domain event contract
- EventBus - Event bus for dispatching events
- EventRegistry - Registry for managing domain events
- StoreEventSystemRequest - Form request for validation
- EventSystemResource - JSON resource for API responses