49 lines
1.5 KiB
PHP
49 lines
1.5 KiB
PHP
|
<?php
|
||
|
namespace Aldarien\Common\Service;
|
||
|
|
||
|
use \ORM as ORM;
|
||
|
use Aldarien\Common\Alias\Model;
|
||
|
|
||
|
class ParisConfig {
|
||
|
protected $default;
|
||
|
protected $databases;
|
||
|
public function __construct(string $default, object $databases) {
|
||
|
$this->default = $default;
|
||
|
$this->databases = $databases;
|
||
|
}
|
||
|
protected function getEngines() {
|
||
|
$dir = implode(DIRECTORY_SEPARATOR, [dirname(dirname(__DIR__)), 'src']);
|
||
|
$files = new \DirectoryIterator($dir);
|
||
|
$engines = [];
|
||
|
foreach ($files as $file) {
|
||
|
if ($file->isDir() or $file->getExtension() != 'php') {
|
||
|
continue;
|
||
|
}
|
||
|
$engine = $file->getBasename('.' . $file->getExtension());
|
||
|
$name = str_replace('requirements', '', strtolower($engine));
|
||
|
$engines[$name] = $engine;
|
||
|
}
|
||
|
return $engines;
|
||
|
}
|
||
|
public function config() {
|
||
|
$engines = $this->getEngines();
|
||
|
foreach ($this->databases as $name => $database) {
|
||
|
if ($name == $this->default) {
|
||
|
$name = ORM::DEFAULT_CONNECTION;
|
||
|
}
|
||
|
$engine = $database->engine;
|
||
|
$requirements = implode("\\", ['Aldarien', 'Models', $engines[strtolower($engine)]]);
|
||
|
$requirements = new $requirements();
|
||
|
$dsn = $requirements->getDSN($database);
|
||
|
ORM::configure($dsn, null, $name);
|
||
|
if ($requirements->hasUser()) {
|
||
|
ORM::configure('username', $database->user->name, $name);
|
||
|
ORM::configure('password', $database->user->password, $name);
|
||
|
}
|
||
|
}
|
||
|
if (isset($this->databases->short_table_names)) {
|
||
|
Model::$short_table_names = $this->databases->short_table_names;
|
||
|
}
|
||
|
}
|
||
|
}
|