Closures as Expressions
Type-safe Closures as alternative to expression language in PHP attributes
// Expression Language
#[Delayed(expression: 'payload.dueDate')]
// Closure
#[Delayed(expression: static function (#[Payload] OrderWasPlaced $event): \DateTimeInterface {
return $event->dueDate;
})]How Closure parameters are resolved
#[CommandHandler('order.place')]
public function placeOrder(
PlaceOrder $command,
#[Header('token', expression: static function (
#[Header('token')] string $token,
#[Reference] TokenService $tokenService,
): string {
return $tokenService->normalize($token);
})] string $token,
): void {}Context variables bound by parameter name
Use cases
Deriving Message Handler parameters
Delaying Messages and Time to Live
Enriching Message Headers
Fetching Aggregates
Deduplication
Tenant resolution
Database Business Methods
Good to know
Last updated
Was this helpful?