initContainer(); $this->initAutoloads(); $this->initPreloads(); } protected function initContainer(): void { $this->container = (new ContainerBuilder())->build(); } /** * Run an application runner. * * @param string $className A runner class name. * @param ?RunnerParams $params Runner parameters. */ public function run(string $className, ?RunnerParams $params = null): void { $runnerRunner = $this->getInjectableFactory()->create(RunnerRunner::class); try { $runnerRunner->run($className, $params); } catch (RunnerException $e) { die($e->getMessage()); } } /** * Whether the application is installed. */ public function isInstalled(): bool { return $this->getConfig()->get('isInstalled'); } /** * Get the service container. */ public function getContainer(): Container { return $this->container; } protected function getInjectableFactory(): InjectableFactory { return $this->container->get('injectableFactory'); } protected function getApplicationUser(): ApplicationUser { return $this->container->get('applicationUser'); } protected function getClientManager(): ClientManager { return $this->container->get('clientManager'); } protected function getMetadata(): Metadata { return $this->container->get('metadata'); } protected function getConfig(): Config { return $this->container->get('config'); } protected function initAutoloads(): void { $autoload = $this->getInjectableFactory()->create(Autoload::class); $autoload->register(); } /** * Initialize services that has the 'preload' parameter. */ protected function initPreloads(): void { foreach ($this->getMetadata()->get(['app', 'containerServices']) ?? [] as $name => $defs) { if ($defs['preload'] ?? false) { $this->container->get($name); } } } /** * Set a base path of an index file related to the application directory. Used for a portal. */ public function setClientBasePath(string $basePath): void { $this->getClientManager()->setBasePath($basePath); } /** * Setup the system user. The system user is used when no user is logged in. */ public function setupSystemUser(): void { $this->getApplicationUser()->setupSystemUser(); } }