Dependency Injection

Strata doesn’t ship a container. It uses whatever PSR-11 container you give it. PHP-DI, League\Container, Symfony — your choice.

Coming soon: Full docs for container setup, auto-wiring, service providers, and testing with mocks.

Quick Example with PHP-DI

use DI\ContainerBuilder;
            use Strata\App;

            $containerBuilder = new ContainerBuilder();
            $containerBuilder->addDefinitions([
                LoggerInterface::class => fn() => new Monolog\Logger('app'),
                UserRepository::class => fn(ContainerInterface $c) => new UserRepository($c->get(PDO::class)),
            ]);

            $container = $containerBuilder->build();

            $app = new App($container);

            $app->get('/users/{id}', function(int $id, UserRepository $users) {
                return $users->find($id); // $users is auto-injected
            });

            $app->run();

Typehint anything in your route handlers or middleware. If the container can build it, Strata injects it.

No Container? No Problem

Don’t want a container? Pass dependencies manually. Strata won’t complain.

$users = new UserRepository($pdo);

            $app->get('/users/{id}', function(int $id) use ($users) {
                return $users->find($id);
            });