/** * 应用程序执行 * * * @return null */ public static function run() { $className = application::getControllerName(); $classPath = application::getControllerPath(); $method = application::getControllerMethod(); $arguments = router::arguments(); //加载controller if (file_exists($classPath)) { zotop::load($classPath); } else { zotop::run('system.404', array('filepath' => $classPath)); return false; } if (class_exists($className, false)) { $controller = new $className(); if (method_exists($controller, $method) && $method[0] != '_') { call_user_func_array(array($controller, '__before'), $arguments); call_user_func_array(array($controller, $method), $arguments); call_user_func_array(array($controller, '__after'), $arguments); return true; } //当方法不存在时,默认调用类的_empty()函数,你可以在控制器中重写此方法 return call_user_func_array(array($controller, '__empty'), array($method, $arguments)); } return false; }
/** * 运行时执行,并加载相关文件 */ public static function run() { //打包配置文件 zotop::data(ZOTOP_PATH_RUNTIME . DS . 'config.php', zotop::config()); //打包全部hook文件 $hooks = runtime::compile(runtime::$hooks); if (!empty($hooks)) { file::write(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APP_NAME . '_hooks.php', $hooks, true); } //加载hooks以便核心文件使用 zotop::load(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APP_NAME . '_hooks.php'); //打包核心文件 $libraries = zotop::register(); $libraries = runtime::compile($libraries); if (!empty($libraries)) { file::write(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APP_NAME . '.php', $libraries, true); } }
/** * 运行时执行,并加载相关文件 */ public static function build() { runtime::config(); runtime::library(); runtime::hooks(); //打包配置文件 zotop::data(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION_GROUP . '.config.php', zotop::config()); //打包全部hook文件 $hooks = runtime::compile(runtime::$hooks); if (!empty($hooks)) { file::write(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION_GROUP . '.hooks.php', $hooks, true); } //加载hooks以便核心文件使用 zotop::load(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION_GROUP . '.hooks.php'); //打包核心文件 $libraries = zotop::register(); $libraries = runtime::compile($libraries); if (!empty($libraries)) { file::write(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION_GROUP . '.core.php', $libraries, true); } }
/** * 应用程序执行 * * * @return null */ public static function run() { $classname = router::controllerName(); $filepath = router::controllerPath(); $method = router::controllerMethod(); $arguments = router::arguments(); //加载controller if (file_exists($filepath)) { zotop::load($filepath); } if (class_exists($classname, false)) { $controller = new $classname(); if (method_exists($controller, $method) && $method[0] != '_') { return call_user_func_array(array($controller, $method), $arguments); } else { //当方法不存在时,默认调用类的_empty()函数,你可以在控制器中重写此方法 return call_user_func_array(array($controller, '_empty'), $arguments); } } zotop::run('system.404', array('filepath' => $filepath)); }
/** * 应用程序执行 * * * @return null */ public static function execute() { if (zotop::modules(ZOTOP_MODULE) === null || (int) zotop::modules(ZOTOP_MODULE, 'status') < 0) { msg::error(array('title' => '404 error', 'content' => zotop::t('<h2>未能找到模块,模块可能尚未安装或者已经被禁用?</h2>'), 'detail' => zotop::t('模块名称:{$module}', array('module' => ZOTOP_MODULE)))); } //controller classname $controllerName = ZOTOP_MODULE . '_controller_' . ZOTOP_CONTROLLER; $controllerPath = ZOTOP_MODULE_PATH . DS . ZOTOP_GROUP . DS . ZOTOP_CONTROLLER . '.php'; if (!class_exists($controllerName, false)) { if (!zotop::load($controllerPath)) { msg::error(array('title' => '404 error', 'content' => zotop::t('<h2>未能找到控制器,请检查控制器文件是否存在?</h2>'), 'detail' => zotop::t('文件名称:{$file}', array('file' => $controllerPath)))); } } if (class_exists($controllerName, false)) { //实例化控制器 $controller = new $controllerName(); //调用__execute方法 $controller->execute(ZOTOP_ACTION, application::arguments()); } else { msg::error(array('title' => '404 error', 'content' => zotop::t('<h2>未能找到控制器类,请检查控制器文件中是否存在控制器类?</h2>'), 'detail' => zotop::t('类名称:{$className}', array('className' => $controllerName)))); } }
/** * 用于实例化一个模型{module}.{model},如 zotop.user,实例化系统模块的user模型 * * * @param $name 模型名称空间 * @return object(model) */ public static function model($name = '') { static $models = array(); if (empty($name)) { return new model(); } if (isset($models[$name])) { return $models[$name]; } list($module, $model) = explode('.', $name); $modelName = $model . '_model'; if (!class_exists($modelName)) { $modelPath = zotop::module($module, 'path') . DS . 'models' . DS . $model . '.php'; if (zotop::load($modelPath) == false) { zotop::error(zotop::t('<h2>请检查相应的模型文件是否存在</h2>文件地址:{$modelPath}', array('modelPath' => $modelPath))); } } if (class_exists($modelName)) { $m = new $modelName(); $m->moduleName = $module; $models[$name] = $m; return $m; } zotop::error(zotop::t('<h2>请检查相应的模型文件中是否存在模型类 {$modelName}</h2>文件地址:{$modelPath}', array('modelPath' => $modelPath, 'modelName' => $modelName))); }
define('ZOTOP_RUNTIME', ZOTOP . DS . 'runtime'); define('TIME', time()); //加载核心文件 if (file_exists(ZOTOP_RUNTIME . DS . '~runtime.php') && $debug == 'ddd') { require ZOTOP_RUNTIME . DS . '~runtime.php'; } else { //加载系统核心 require ZOTOP_LIBRARIES . DS . 'zotop' . DS . 'core' . DS . 'zotop.php'; //注册别名,自动加载系统库文件 zotop::register(include ZOTOP_LIBRARIES . DS . 'zotop' . DS . 'library.php'); zotop::register(include APP_ROOT . DS . 'library.php'); } //配置的初始化 if (file_exists(ZOTOP_RUNTIME . DS . '~config.php')) { zotop::config(include ZOTOP_RUNTIME . DS . '~config.php'); } else { zotop::config(include ZOTOP_CONFIG . DS . 'zotop.php'); zotop::config(include ZOTOP_CONFIG . DS . 'setting.php'); zotop::config('zotop.database', include ZOTOP_CONFIG . DS . 'database.php'); zotop::config('zotop.application', include ZOTOP_CONFIG . DS . 'application.php'); zotop::config('zotop.module', include ZOTOP_CONFIG . DS . 'module.php'); zotop::config('zotop.router', include ZOTOP_CONFIG . DS . 'router.php'); } //启动底层系统 zotop::boot(); //hook的初始化 if (is_file(ZOTOP_RUNTIME . DS . '~hook.php')) { zotop::load(ZOTOP_RUNTIME . DS . '~hook.php'); } else { //生成全局hook文件 }
define('ZOTOP_PATH_LIBRARIES', ZOTOP_PATH_SYSTEM . DS . 'libraries'); define('ZOTOP_PATH_BACKUP', ZOTOP_PATH_SYSTEM . DS . 'backup'); define('ZOTOP_PATH_DATA', ZOTOP_PATH_SYSTEM . DS . 'data'); define('ZOTOP_PATH_CACHE', ZOTOP_PATH_SYSTEM . DS . 'cache'); define('ZOTOP_PATH_RUNTIME', ZOTOP_PATH_SYSTEM . DS . 'runtime'); //定义URL常量 define('ZOTOP_URL_ROOT', dirname($_SERVER['SCRIPT_NAME'])); define('ZOTOP_URL_SYSTEM', ZOTOP_URL_ROOT . '/' . basename(ZOTOP_PATH_SYSTEM)); define('ZOTOP_URL_MODULES', ZOTOP_URL_ROOT . '/' . basename(ZOTOP_PATH_MODULES)); //定义app常量 define('ZOTOP_APP_NAME', ZOTOP_APP); define('ZOTOP_APP_ROOT', ZOTOP_PATH_APPLICATION . DS . ZOTOP_APP_NAME); define('ZOTOP_APP_URL', ZOTOP_URL_SYSTEM . '/' . ZOTOP_APP_NAME); //加载系统核心文件 if (file_exists(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APP_NAME . '.php') && !DEBUG) { require ZOTOP_PATH_RUNTIME . DS . ZOTOP_APP_NAME . '.php'; //加载hook文件 zotop::load(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APP_NAME . '_hooks.php'); //加载配置参数 zotop::config(include ZOTOP_PATH_RUNTIME . DS . DS . 'config.php'); //系统启动 zotop::boot(); } else { //加载系统核心 require ZOTOP_PATH_LIBRARIES . DS . 'zotop' . DS . 'classes' . DS . 'zotop.php'; //注册自动加载系统库文件 zotop::register(include ZOTOP_PATH_LIBRARIES . DS . 'zotop' . DS . 'classes.php'); zotop::register(include ZOTOP_APP_ROOT . DS . 'libraries' . DS . 'classes.php'); //重载系统 zotop::build(); }
/** * 应用程序重启 * * * @return null */ public static function reboot() { //清理运行时文件 folder::clear(ZOTOP_PATH_RUNTIME); //加载全部配置 zotop::config(@(include ZOTOP_PATH_DATA . DS . 'config.php')); zotop::config('zotop.database', @(include ZOTOP_PATH_DATA . DS . 'database.php')); zotop::config('zotop.application', @(include ZOTOP_PATH_DATA . DS . 'application.php')); zotop::config('zotop.module', @(include ZOTOP_PATH_DATA . DS . 'module.php')); zotop::config('zotop.router', @(include ZOTOP_PATH_DATA . DS . 'router.php')); zotop::register(@(include ZOTOP_PATH_MODULES . DS . 'system' . DS . 'libraries.php')); zotop::register(@(include ZOTOP_PATH_APPLICATION . DS . 'libraries.php')); //加载全部开启模块的hook以及注册类文件 $modules = zotop::config('zotop.module'); foreach ((array) $modules as $module) { if ((int) $module['status'] >= 0 && folder::exists($module['path'])) { //加载库文件 zotop::register(@(include path::decode($module['path']) . DS . 'libraries.php')); //加载hook文件 application::$hooks[] = $module['path'] . DS . 'hooks' . DS . ZOTOP_APPLICATION . '.php'; } } //打包配置文件 zotop::data(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.config.php', zotop::config()); //打包hook文件 file::write(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.hooks.php', application::compile(application::$hooks), true); //加载hooks以便核心文件使用 zotop::load(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.hooks.php'); //打包类文件 file::write(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.core.php', application::compile(zotop::register()), true); }
//定义常用路径 define('ZOTOP_PATH_DATA', ZOTOP_PATH_ROOT . DS . 'data'); define('ZOTOP_PATH_BACKUP', ZOTOP_PATH_DATA . DS . 'backup'); define('ZOTOP_PATH_CACHE', ZOTOP_PATH_DATA . DS . 'cache'); define('ZOTOP_PATH_RUNTIME', ZOTOP_PATH_DATA . DS . 'runtime'); define('ZOTOP_PATH_APPLICATION', ZOTOP_PATH_ROOT . DS . 'site'); //定义URL路径及参数 define('ZOTOP_URL_ROOT', dirname($_SERVER['SCRIPT_NAME'])); define('ZOTOP_URL_MODULES', ZOTOP_URL_ROOT . '/modules'); define('ZOTOP_URL_THEMES', ZOTOP_URL_ROOT . '/themes'); define('ZOTOP_URL_COMMON', ZOTOP_URL_ROOT . '/site/common'); //加载运行文件 if (file_exists(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.core.php') && !DEBUG) { require ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.core.php'; //加载hook文件 zotop::load(ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.hooks.php'); //加载配置参数 zotop::config(include ZOTOP_PATH_RUNTIME . DS . ZOTOP_APPLICATION . '.config.php'); //系统启动 zotop::boot(); } else { //加载系统核心 require ZOTOP_PATH_MODULES . DS . 'system' . DS . 'libraries' . DS . 'zotop.php'; //注册自动加载系统库文件 zotop::register(@(include ZOTOP_PATH_MODULES . DS . 'system' . DS . 'libraries.php')); zotop::register(@(include ZOTOP_PATH_APPLICATION . DS . 'libraries.php')); zotop::reboot(); } //系统启动并运行 zotop::run('system.init'); zotop::run('system.route');
/** * 用于实例化一个模型{module}.{model},如 zotop.user,实例化系统模块的user模型 * * * @param $name 模型名称空间 * @return object(model) */ public static function model($name = '') { static $models = array(); if (empty($name)) { return new model(); } if (isset($models[$name])) { return $models[$name]; } list($module, $model) = explode('.', $name); $modelName = $module . '_model_' . $model; if (!class_exists($modelName)) { $modelPath = zotop::modules($module, 'path') . DS . 'models' . DS . $model . '.php'; if (zotop::load($modelPath) == false) { zotop::error(array('content' => zotop::t('请检查相应的模型文件是否存在'), 'detail' => zotop::t('文件地址:{$modelPath}', array('modelPath' => $modelPath)))); } } if (class_exists($modelName)) { $m = new $modelName(); $models[$name] = $m; return $m; } zotop::error(array('content' => zotop::t('请检查相应的模型文件中是否存在模型类 :{$modelName}', array('modelPath' => $modelPath, 'modelName' => $modelName)), 'detail' => zotop::t('文件地址:{$modelPath}', array('modelPath' => $modelPath, 'modelName' => $modelName)))); }
/** * 用于实例化一个模型{module}.{model},如 zotop.user,实例化系统模块的user模型 * * * @param $name 模型名称空间 * @return object(model) */ public static function model($name = '') { static $models = array(); if (empty($name)) { return new model(); } if (isset($models[$name])) { return $models[$name]; } list($module, $model) = explode('.', $name); $modelName = $model . '_model'; if (!class_exists($modelName)) { $modelPath = zotop::module($module, 'root') . DS . 'models' . DS . $model . '.php'; zotop::load($modelPath); } if (class_exists($modelName)) { $m = new $modelName(); $models[$name] = $m; return $m; } zotop::error(100, '未能找到模型', zotop::t('<h2>未能找到模型{$modelName},请检查模型文件是否存在错误</h2>文件地址:{$modelPath}', array('modelName' => $modelName, 'modelPath' => $modelPath))); }
//定义常量 define('DS', DIRECTORY_SEPARATOR); define('ZOTOP', true); //路径常量 define('ZPATH_ROOT', dirname(ZPATH_SYSTEM)); define('ZPATH_LIBRARIES', ZPATH_SYSTEM . DS . 'libraries'); define('ZPATH_MODULES', ZPATH_SYSTEM . DS . 'modules'); define('ZPATH_CONFIG', ZPATH_SYSTEM . DS . 'config'); define('ZPATH_BACKUP', ZPATH_SYSTEM . DS . 'backup'); define('ZPATH_DATA', ZPATH_SYSTEM . DS . 'data'); define('ZPATH_CACHE', ZPATH_DATA . DS . 'cache'); define('ZPATH_RUNTIME', ZPATH_SYSTEM . DS . 'runtime'); //url常量 defined('ZURL_ROOT') or define('ZURL_ROOT', dirname($_SERVER['SCRIPT_NAME'])); //加载系统核心 if (file_exists(ZPATH_RUNTIME . DS . APP_NAME . '.php')) { require ZPATH_RUNTIME . DS . APP_NAME . '.php'; //加载常用参数 zotop::config(include ZPATH_RUNTIME . DS . 'config.php'); zotop::load(ZPATH_RUNTIME . DS . 'hook.php'); //系统启动 zotop::boot(); } else { //加载系统核心 require ZPATH_LIBRARIES . DS . 'zotop' . DS . 'classes' . DS . 'zotop.php'; //注册别名,自动加载系统库文件 zotop::register(include ZPATH_LIBRARIES . DS . 'zotop' . DS . 'library.php'); zotop::register(include APP_ROOT . DS . 'library.php'); //重新加载系统 zotop::reboot(); }