/**
* The constructor
*
* @param string $appBaseDir - The dir containing /App directory
* @param string $appName
* @param string $uri
* @throws Exception
*/
public function __construct($appBaseDir, $appName = "Www", $uri = null)
{
if (!$uri) {
$uri = implode("/", Http\Request::getUrlSegments());
}
Env::setAppRootDir($appBaseDir);
$appName = self::formatName($appName);
if (!is_dir(Env::getAppRootDir())) {
throw new Exception("The application root: 'App' directory doesn't\n exist at: " . Env::getAppRootDir());
} else {
Autoloader::register(dirname(Env::getAppRootDir()));
$this->appDir = Env::getAppRootDir() . "/{$appName}";
if (!is_dir($this->appDir)) {
throw new Exception("The application name: '{$appName}' doesn't\n exist at: " . $this->appDir);
}
$this->setUri($uri);
$this->baseNamespace = "App\\{$appName}";
$this->config = (new Config("VoodooApp"))->loadFile($this->appDir . "/Config" . Config::EXT);
$routes = (new Config("AppRoutes"))->loadFile($this->appDir . "/Routes" . Config::EXT);
$this->setRouting($routes->get("path") ?: []);
if ($this->config->get("application.defaultModule")) {
$this->defaultModule = $this->config->get("application.defaultModule");
}
if ($this->config->get("application.defaultController")) {
$this->defaultController = $this->config->get("application.defaultController");
}
}
}