Implement the ability to register and execute callbacks that run after the HTTP response is sent to the client, without blocking the request lifecycle.
This allows long-running or non-essential tasks (e.g. logging, sending emails, dispatching events) to be deferred, improving response time and user experience.
Acceptance Criteria:
-
Introduce a new internal hook named after_response (or similar).
-
Allow developers to register callbacks using HookManager::on('after_response', callable).
-
Ensure multiple parts of the codebase can register deferred tasks safely.
-
Execute all deferred callbacks after $response->send() in the lifecycle.
-
Wrap execution in try/catch to prevent deferred task failures from affecting app behavior.
-
Add config entry for after_response hook (optional, or register programmatically).
Implement the ability to register and execute callbacks that run after the HTTP response is sent to the client, without blocking the request lifecycle.
This allows long-running or non-essential tasks (e.g. logging, sending emails, dispatching events) to be deferred, improving response time and user experience.
Acceptance Criteria:
Introduce a new internal hook named after_response (or similar).
Allow developers to register callbacks using HookManager::on('after_response', callable).
Ensure multiple parts of the codebase can register deferred tasks safely.
Execute all deferred callbacks after $response->send() in the lifecycle.
Wrap execution in try/catch to prevent deferred task failures from affecting app behavior.
Add config entry for after_response hook (optional, or register programmatically).