예제 #1
0
 /**
  * 构造方法
  *
  * 用于初始化运行环境,或对基本变量进行赋值
  *
  * @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;
 }
예제 #2
0
 /**
  * 工厂模式实例化常用缓存类
  *
  * @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;
 }
예제 #3
0
 /**
  * 加载视图处理类并完成视图类的实例化
  *
  * 注:本类方法为回调类方法。
  *
  * @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;
 }
예제 #4
0
 /**
  * 构造方法(函数)
  *
  * 用于初始化程序运行环境,或对基本变量进行赋值
  *
  * @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;
 }
예제 #5
0
 /**
  * 写入日志
  *
  * @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);
 }
예제 #6
0
 /**
  * 获取生成的文件的路径
  *
  * @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';
 }
예제 #7
0
파일: DoitPHP.php 프로젝트: a53abc/doitphp
 /**
  * 创建页面控制器对象
  *
  * @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];
 }
예제 #8
0
 /**
  * 分析视图缓存文件名
  *
  * @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';
 }
예제 #9
0
 /**
  * 加载自定义配置文件所引导的文件
  *
  * @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;
 }
예제 #10
0
 /**
  * 加载并单例模式实例化扩展模块(通常为第三方程序)
  *
  *  注:这里所调用的扩展模声要放在项目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];
 }
예제 #11
0
 /**
  * 加载视图处理类并完成视图类的实例化
  *
  * 注:本类方法为回调类方法。通过在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();
 }