Files
models/common/Service/ParisConfig.php

49 lines
1.5 KiB
PHP
Raw Permalink Normal View History

2019-09-13 17:32:42 -03:00
<?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;
}
}
}