123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
-
- namespace Tqdev\PhpCrudApi;
-
- class Config
- {
- private $values = [
- 'driver' => null,
- 'address' => 'localhost',
- 'port' => null,
- 'username' => null,
- 'password' => null,
- 'database' => null,
- 'middlewares' => 'cors',
- 'controllers' => 'records,geojson,openapi',
- 'cacheType' => 'TempFile',
- 'cachePath' => '',
- 'cacheTime' => 10,
- 'debug' => false,
- 'basePath' => '',
- 'openApiBase' => '{"info":{"title":"PHP-CRUD-API","version":"1.0.0"}}',
- ];
-
- private function getDefaultDriver(array $values): string
- {
- if (isset($values['driver'])) {
- return $values['driver'];
- }
- return 'mysql';
- }
-
- private function getDefaultPort(string $driver): int
- {
- switch ($driver) {
- case 'mysql':return 3306;
- case 'pgsql':return 5432;
- case 'sqlsrv':return 1433;
- }
- }
-
- private function getDefaultAddress(string $driver): string
- {
- switch ($driver) {
- case 'mysql':return 'localhost';
- case 'pgsql':return 'localhost';
- case 'sqlsrv':return 'localhost';
- }
- }
-
- private function getDriverDefaults(string $driver): array
- {
- return [
- 'driver' => $driver,
- 'address' => $this->getDefaultAddress($driver),
- 'port' => $this->getDefaultPort($driver),
- ];
- }
-
- public function __construct(array $values)
- {
- $driver = $this->getDefaultDriver($values);
- $defaults = $this->getDriverDefaults($driver);
- $newValues = array_merge($this->values, $defaults, $values);
- $newValues = $this->parseMiddlewares($newValues);
- $diff = array_diff_key($newValues, $this->values);
- if (!empty($diff)) {
- $key = array_keys($diff)[0];
- throw new \Exception("Config has invalid value '$key'");
- }
- $this->values = $newValues;
- }
-
- private function parseMiddlewares(array $values): array
- {
- $newValues = array();
- $properties = array();
- $middlewares = array_map('trim', explode(',', $values['middlewares']));
- foreach ($middlewares as $middleware) {
- $properties[$middleware] = [];
- }
- foreach ($values as $key => $value) {
- if (strpos($key, '.') === false) {
- $newValues[$key] = $value;
- } else {
- list($middleware, $key2) = explode('.', $key, 2);
- if (isset($properties[$middleware])) {
- $properties[$middleware][$key2] = $value;
- } else {
- throw new \Exception("Config has invalid value '$key'");
- }
- }
- }
- $newValues['middlewares'] = array_reverse($properties, true);
- return $newValues;
- }
-
- public function getDriver(): string
- {
- return $this->values['driver'];
- }
-
- public function getAddress(): string
- {
- return $this->values['address'];
- }
-
- public function getPort(): int
- {
- return $this->values['port'];
- }
-
- public function getUsername(): string
- {
- return $this->values['username'];
- }
-
- public function getPassword(): string
- {
- return $this->values['password'];
- }
-
- public function getDatabase(): string
- {
- return $this->values['database'];
- }
-
- public function getMiddlewares(): array
- {
- return $this->values['middlewares'];
- }
-
- public function getControllers(): array
- {
- return array_map('trim', explode(',', $this->values['controllers']));
- }
-
- public function getCacheType(): string
- {
- return $this->values['cacheType'];
- }
-
- public function getCachePath(): string
- {
- return $this->values['cachePath'];
- }
-
- public function getCacheTime(): int
- {
- return $this->values['cacheTime'];
- }
-
- public function getDebug(): bool
- {
- return $this->values['debug'];
- }
-
- public function getBasePath(): string
- {
- return $this->values['basePath'];
- }
-
- public function getOpenApiBase(): array
- {
- return json_decode($this->values['openApiBase'], true);
- }
- }
|