Centralize your model event listeners. Observers allow you to group event handling logic for a model into a single class.
Observers are simple classes with methods corresponding to Eloquent events:creating, created, updating, updated,saving, saved, deleting, deleted.
1import { Observer } from 'canxjs';2import { User } from '../models/User';34export class UserObserver {5/**6* Handle the User "created" event.7*/8async created(user: User) {9// Send welcome email10await Mail.to(user).send(new WelcomeEmail());11}1213/**14* Handle the User "updating" event.15*/16async updating(user: User) {17// Audit logic18if (user.isDirty('email')) {19console.log('Email changed by user ' + user.id);20}21}2223/**24* Handle the User "deleted" event.25*/26async deleted(user: User) {27// Cleanup related data28}29}
Register your observers in a Service Provider, typically in the boot method.
1// src/providers/AppServiceProvider.ts2import { User } from '../models/User';3import { UserObserver } from '../observers/UserObserver';45export class AppServiceProvider extends ServiceProvider {6async boot() {7User.observe(UserObserver);8}9}
For simple logic, you can define static hook methods directly on the Model class.
1// Inside your Model class2export class User extends Model {34protected static async onCreating(model: User) {5if (!model.uuid) {6model.uuid = crypto.randomUUID();7}8}910protected static async onSaved(model: User) {11// ...12}13}