diff --git a/api.php b/api.php index 9bc5076..bcd6bb6 100644 --- a/api.php +++ b/api.php @@ -12,14 +12,27 @@ $autoloader->addPrefix("AirQuality", "logic"); $autoloader->addPrefix("SBRL", "lib/SBRL"); $autoloader->register(); +// 2: Settings +$settings = new \SBRL\TomlConfig( + "data/settings.toml", + "settings.default.toml" +); + // 2: Dependency injection $di_builder = new DI\ContainerBuilder(); $di_builder->addDefinitions("di_config.php"); -// TODO: In production, we should use something like this - see http://php-di.org/doc/container-configuration.html -// $builder->enableCompilation(__DIR__ . '/tmp'); -// $builder->writeProxiesToFile(true, __DIR__ . '/tmp/proxies'); +if($settings->get("env.mode") == "production") { + // http://php-di.org/doc/container-configuration.html + if(!file_exists(ROOT_DIR."data/cache/php_di")) + mkdir(ROOT_DIR."data/cache/php_di", 0700); + $builder->enableCompilation(ROOT_DIR."data/cache/php_di"); + + if(!file_exists(ROOT_DIR."data/cache/php_di_proxies")) + mkdir(ROOT_DIR."data/cache/php_di_proxies", 0700); + $builder->writeProxiesToFile(true, ROOT_DIR."data/cache/php_di_proxies"); +} $di_container = $di_builder->build(); diff --git a/di_config.php b/di_config.php index 06cfdc5..bd9c444 100644 --- a/di_config.php +++ b/di_config.php @@ -16,11 +16,9 @@ return [ "settings.file_default" => "data/settings.toml", "settings.file_custom" => "settings.default.toml", - \SBRL\TomlConfig::class => function(ContainerInterface $c) { - return new TomlConfig( - $c->get("settings.file_default"), - $c->get("settings.file_custom") - ); + TomlConfig::class => function(ContainerInterface $c) { + global $settings; + return $settings; }, IDeviceRepository::class => DI\autowire(MariaDBDeviceRepository::class), diff --git a/settings.default.toml b/settings.default.toml index 8e4a860..88dc50a 100644 --- a/settings.default.toml +++ b/settings.default.toml @@ -3,6 +3,10 @@ # Your changes may be overwritten in a future update. # Instead, edit the custom configuration file located at "data/settings.toml". +[env] +# The operating mode. Can be either "development", or "production" (default; activates a number of optimisations which might make development harder, such as 3rd-party library caches) +mode = "production" + [database] # Settings that control the database, or the connection to it