* "app_name" => * "autoload_dir" => * ); */ public $option; public $devMode = true; public $defaultStoreDir; protected $proj_dir; protected $app_dir; protected $data_dir; protected $lotusRuntimeDir; protected $coreCacheHandle; public function __construct() { $this->lotusRuntimeDir = dirname(__FILE__) . DIRECTORY_SEPARATOR; } public function init() { $underMVC = false; if (isset($this->option["proj_dir"]) && !empty($this->option["proj_dir"])) { $this->proj_dir = rtrim($this->option["proj_dir"], '\\/') . '/'; if (isset($this->option["app_name"]) && !empty($this->option["app_name"])) { $this->app_dir = $this->proj_dir . "app/" . $this->option["app_name"] . "/"; $this->data_dir = $this->proj_dir . "data/" . $this->option["app_name"] . "/"; $underMVC = true; } else { trigger_error("Lotus option [app_name] is missing."); } } /** * Load core component */ require_once $this->lotusRuntimeDir . "Store.php"; require_once $this->lotusRuntimeDir . "StoreMemory.php"; require_once $this->lotusRuntimeDir . "StoreFile.php"; if ($this->defaultStoreDir) { if ($defaultStoreDir = realpath($this->defaultStoreDir)) { LtStoreFile::$defaultStoreDir = $defaultStoreDir; } else { trigger_error("invalid [default store dir]: " . $this->defaultStoreDir); } } if (!$this->devMode) { /** * accelerate LtAutoloader, LtConfig */ $this->coreCacheHandle = new LtStoreFile; $prefix = sprintf("%u", crc32(serialize($this->app_dir))); $this->coreCacheHandle->prefix = 'Lotus-' . $prefix; $this->coreCacheHandle->useSerialize = true; $this->coreCacheHandle->init(); } /** * Init Autoloader, do this before init all other lotusphp component. */ $this->prepareAutoloader(); /** * init Config */ $this->prepareConfig(); /** * Run dispatcher when under MVC mode */ if ($underMVC) { $this->runMVC(); } } /** * Autoload all lotus components and user-defined libraries; */ protected function prepareAutoloader() { require_once $this->lotusRuntimeDir . "Autoloader/Autoloader.php"; $autoloader = new LtAutoloader; $autoloader->autoloadPath[] = $this->lotusRuntimeDir; if (isset($this->option["autoload_dir"])) { $autoloader->autoloadPath[] = $this->option["autoload_dir"]; } if ($this->proj_dir) { is_dir($this->proj_dir . 'lib') && $autoloader->autoloadPath[] = $this->proj_dir . 'lib'; is_dir($this->app_dir . 'action') && $autoloader->autoloadPath[] = $this->app_dir . 'action'; is_dir($this->app_dir . 'lib') && $autoloader->autoloadPath[] = $this->app_dir . 'lib'; } if (!$this->devMode) { $autoloader->storeHandle = $this->coreCacheHandle; } $autoloader->init(); } protected function prepareConfig() { $this->configHandle = LtObjectUtil::singleton('LtConfig'); if (!$this->devMode) { $configFile = 'conf/conf.php'; $this->configHandle->storeHandle = $this->coreCacheHandle; } else { $configFile = 'conf/conf_dev.php'; } $this->configHandle->init(); if ($this->app_dir && is_file($this->app_dir . $configFile)) { $this->configHandle->loadConfigFile($this->app_dir . $configFile); } } protected function runMVC() { $router = LtObjectUtil::singleton('LtRouter'); $router->init(); $dispatcher = LtObjectUtil::singleton('LtDispatcher'); $dispatcher->viewDir = $this->app_dir . 'view/'; $dispatcher->viewTplDir = $this->data_dir . 'templateView/'; if (!$this->devMode) { $dispatcher->viewTplAutoCompile = false; } else { $dispatcher->viewTplAutoCompile = true; } $dispatcher->dispatchAction($router->module, $router->action); } }