/** * 构造方法 * * 用于初始化运行环境,或对基本变量进行赋值 * * @access public * @return boolean */ public function __construct() { //获取默认的语言包目录的路径 $moduleName = Doit::getModuleName(); $this->_langPath = BASE_PATH . (!$moduleName ? 'language' : 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'language') . DIRECTORY_SEPARATOR; return true; }
/** * 工厂模式实例化常用缓存类 * * @access public * * @param string $adapter 缓存类型 * @param array $options 参数 * * @return object */ public static function factory($adapter, $options = null) { //参数分析 if (!$adapter) { return false; } $adapter = trim($adapter); $object = false; //分析缓存引擎 switch ($adapter) { case 'Memcache': $object = Cache_Memcache::getInstance($options); break; case 'Redis': $object = Cache_Redis::getInstance($options); break; case 'File': case 'Apc': case 'Xcache': case 'Wincache': case 'Eaccelerator': $object = Doit::singleton('Cache_' . $adapter); break; } return $object; }
/** * 加载视图处理类并完成视图类的实例化 * * 注:本类方法为回调类方法。 * * @access protected * @return object */ protected function initView() { //当视图文件格式为PHP时,采用Widget自身的视图机制。即:非View Class的视图机制 if (VIEW_EXT == Configure::PHP_VIEW_EXT) { return null; } //分析视图类文件路径 $filePath = DOIT_ROOT . 'core' . DIRECTORY_SEPARATOR . 'WidgetTemplate.class.php'; //加载视图处理类文件 Doit::loadFile($filePath); //实例化视图类 $viewObject = WidgetTemplate::getInstance(); $viewObject->widgetId = $this->_getWidgetName(); return $viewObject; }
/** * 构造方法(函数) * * 用于初始化程序运行环境,或对基本变量进行赋值 * * @access public * @return boolean */ public function __construct() { //获取当前的模块名称 $moduleName = Doit::getModuleName(); //获取Widget文件目录路径 if (!$moduleName) { $widgetPath = BASE_PATH . 'widgets' . DIRECTORY_SEPARATOR; } else { $widgetPath = BASE_PATH . 'modules' . DIRECTORY_SEPARATOR . $moduleName . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR; } //设置挂件视图模板目录的路径 $this->_viewPath = $widgetPath . 'views' . DIRECTORY_SEPARATOR; //设置视图编译缓存文件的默认目录路径 $this->_compilePath = CACHE_PATH . 'views' . DIRECTORY_SEPARATOR . 'widgets' . DIRECTORY_SEPARATOR; return true; }
/** * 写入日志 * * @access public * * @param string $message 所要写入的日志内容 * @param string $level 日志类型. 参数:Warning, Error, Notice * @param string $logFileName 日志文件名 * * @return boolean */ public static function write($message, $level = 'Error', $logFileName = null) { //参数分析 if (!$message) { return false; } //当日志写入功能关闭时 if (Configure::get('application.log') === false) { return true; } $logFilePath = self::_getLogFilePath($logFileName); //分析日志文件存放目录 $logDir = dirname($logFilePath); if (!is_dir($logDir)) { mkdir($logDir, 0777, true); } //分析记录日志的当前页面 $moduleId = Doit::getModuleName(); $controllerId = (!$moduleId ? '' : $moduleId . '::') . Doit::getControllerName(); $actionId = Doit::getActionName(); //分析日志内容 $message = "[{$controllerId}][{$actionId}]:" . $message; return error_log(date('[Y-m-d H:i:s]') . " {$level}: {$message} IP: {$_SERVER['REMOTE_ADDR']}\n", 3, $logFilePath); }
/** * 获取生成的文件的路径 * * @access protected * * @param string $fileName 文件名 * * @return string */ protected function _getFilePath($fileName = null) { //参数分析 if (!$fileName) { $fileName = Doit::getActionName(); } $moduleName = Doit::getModuleName(); return $this->_htmlPath . (!$moduleName ? '' : $moduleName . DIRECTORY_SEPARATOR) . Doit::getControllerName() . DIRECTORY_SEPARATOR . $fileName . '.html'; }
/** * 创建页面控制器对象 * * @access private * * @param array $routeInfo URL路由信息 * * @return object */ private static function _createWebApplication($routerInfo) { //参数分析 if (!$routerInfo || !is_array($routerInfo)) { return false; } //定义变量_app static $_app = array(); self::$_module = $routerInfo['module']; self::$_controller = ucfirst(trim($routerInfo['controller'], '_')); self::$_action = strtolower($routerInfo['action']); $appId = self::$_module ? self::$_module . '-' . self::$_controller . '-' . self::$_action : self::$_controller . '-' . self::$_action; if (!isset($_app[$appId])) { //通过实例化及调用所实例化对象的方法,来完成controller中action页面的加载 $controller = self::$_controller . 'Controller'; $action = self::$_action . 'Action'; $controllerHomePath = BASE_PATH . (self::$_module ? 'modules' . DIRECTORY_SEPARATOR . self::$_module . DIRECTORY_SEPARATOR : '') . 'controllers' . DIRECTORY_SEPARATOR; //分析Controller子目录的情况。注:controller文件的命名中下划线'_'相当于目录的'/'。 if (strpos($controller, '_') === false) { $controllerFilePath = $controllerHomePath . self::$_controller . '.php'; if (!is_file($controllerFilePath)) { //当controller名称中不含有'_'字符时 self::_show404Error(); } //当文件在controller根目录下存在时,直接加载。 self::loadFile($controllerFilePath); } else { //当$controller中含有'_'字符时,将'_'替换为路径分割符。如:"/" 或 "\" $childDirArray = explode('_', strtolower(self::$_controller)); $controllerFileName = ucfirst(array_pop($childDirArray)); $childDirName = implode(DIRECTORY_SEPARATOR, $childDirArray); unset($childDirArray); //重新组装Controller文件的路径 $controllerFilePath = $controllerHomePath . $childDirName . DIRECTORY_SEPARATOR . $controllerFileName . '.php'; if (!is_file($controllerFilePath)) { //当文件在子目录里没有找到时 self::_show404Error(); } //当子目录中所要加载的文件存在时 self::loadFile($controllerFilePath); } //创建一个页面控制器对象(Controller Object) $appObject = new $controller(); if (method_exists($controller, $action)) { $_app[$appId] = $appObject->{$action}(); } else { //所调用方法在所实例化的对象中不存在时 self::_show404Error(); } } return $_app[$appId]; }
/** * 分析视图缓存文件名 * * @access protected * * @param string $cacheId 视图文件的缓存ID * * @return string */ protected function _parseCacheFile($cacheId) { return CACHE_PATH . 'htmls' . DIRECTORY_SEPARATOR . (!Doit::getModuleName() ? '' : Doit::getModuleName() . DIRECTORY_SEPARATOR) . Doit::getControllerName() . DIRECTORY_SEPARATOR . md5($cacheId) . '.action.html'; }
/** * 加载自定义配置文件所引导的文件 * * @access private * * @param string $className 所需要加载的类的名称,注:不含后缀名 * * @return void */ private static function _loadImportConfigFile($className) { //定义自动加载状态。(true:已加载/false:未加载) $atuoLoadStatus = false; //分析配置文件import引导信息 $importRules = Configure::get('import'); //当配置文件引导信息合法时 if ($importRules && is_array($importRules)) { foreach ($importRules as $rules) { if (!$rules) { continue; } //当配置文件引导信息中含有*'时,将设置的规则中的*替换为所要加载的文件类名 if (strpos($rules, '*') !== false) { $filePath = str_replace('*', $className, $rules); } else { $filePath = self::_parseFilePath($rules, $className); } //当自定义自动加载的文件存在时 if (is_file($filePath)) { //加载文件 Doit::loadFile($filePath); $atuoLoadStatus = true; break; } } } return $atuoLoadStatus; }
/** * 加载并单例模式实例化扩展模块(通常为第三方程序) * * 注:这里所调用的扩展模声要放在项目extension目录里的子目录中 * * @access public * * @param string $extensionName 扩展插件名称 * * @access object */ public static final function loadExtension($extensionName) { //参数分析 if (!$extensionName) { return false; } //当所加载的扩展模块还示被实例化时 if (!isset(self::$_extensionObjArray[$extensionName])) { //加载扩展模块的引导文件(index) $extensionPath = self::_getExtRoot($extensionName) . $extensionName . '.php'; Doit::loadFile($extensionPath); self::$_extensionObjArray[$extensionName] = Doit::singleton($extensionName . 'Ext'); } return self::$_extensionObjArray[$extensionName]; }
/** * 加载视图处理类并完成视图类的实例化 * * 注:本类方法为回调类方法。通过在Controller Class的继承子类中重载本类方法,来实现自定义DoitPHP项目的视图机制的操作。 * * @access protected * @return object */ protected function initView() { //分析视图类文件路径 $filePath = DOIT_ROOT . 'core' . DIRECTORY_SEPARATOR . (VIEW_EXT == Configure::PHP_VIEW_EXT ? 'View.class.php' : 'Template.class.php'); //加载视图处理类文件 Doit::loadFile($filePath); //返回视图实例化对象 return VIEW_EXT == Configure::PHP_VIEW_EXT ? View::getInstance() : Template::getInstance(); }