Manage dependencies with Resources
mainResources are used to prepare dependencies (like database connections or shared services) for requests. They are managed via a Utopia\DI\Container.
- Registration: Use
$resources->set('key', callback)to define a dependency. - Injection: Use
->inject('key')on a route or hook to make the resource available in the action closure.
Note: Resources are for dependency preparation. For functional logic (like checking a session), use Hooks instead.
// 1. Define a resource
$resources->set('bootTime', function () {
return \microtime(true);
});
// 2. Inject into an endpoint action
Http::get('/')
->inject('bootTime')
->inject('response')
->action(function(float $bootTime, Response $response) {
$response->send('Process started at: ' . \strval($bootTime));
});
// 3. Inject into a hook
Http::shutdown()
->inject('bootTime')
->action(function(float $bootTime) {
$uptime = \microtime(true) - $bootTime;
\var_dump("Process uptime: " . $uptime . " seconds");
});