/** * 得到完整的数据表名 * @access public * @return string */ public function getTableName() { if (empty($this->trueTableName)) { $tableName = ''; foreach ($this->viewFields as $key => $view) { // 获取数据表名称 if (isset($view['_table'])) { // 2011/10/17 添加实际表名定义支持 可以实现同一个表的视图 $tableName .= $view['_table']; $prefix = $this->tablePrefix; $tableName = preg_replace_callback("/__([A-Z_-]+)__/sU", function ($match) use($prefix) { return $prefix . strtolower($match[1]); }, $tableName); } else { $class = parse_res_name($key, C('DEFAULT_M_LAYER')); $Model = class_exists($class) ? new $class() : M($key); $tableName .= $Model->getTableName(); } // 表别名定义 $tableName .= !empty($view['_as']) ? ' ' . $view['_as'] : ' ' . $key; // 支持ON 条件定义 $tableName .= !empty($view['_on']) ? ' ON ' . $view['_on'] : ''; // 指定JOIN类型 例如 RIGHT INNER LEFT 下一个表有效 $type = !empty($view['_type']) ? $view['_type'] : ''; $tableName .= ' ' . strtoupper($type) . ' JOIN '; $len = strlen($type . '_JOIN '); } $tableName = substr($tableName, 0, -$len); $this->trueTableName = $tableName; } return $this->trueTableName; }
/** * 实例化模型类 格式 [资源://][模块/]模型 * @param string $name 资源地址 * @param string $layer 模型层名称 * @return Model */ function D($name = '', $layer = '') { if (empty($name)) { return new System\Model(); } static $_model = array(); $layer = $layer ?: C('DEFAULT_M_LAYER'); if (isset($_model[$name . $layer])) { return $_model[$name . $layer]; } $class = parse_res_name($name, $layer); if (class_exists($class)) { $model = new $class(basename($name)); } elseif (false === strpos($name, '/')) { // 自动加载公共模块下面的模型 if (!C('APP_USE_NAMESPACE')) { import('Common/' . $layer . '/' . $class); } else { $class = '\\Common\\' . $layer . '\\' . $name . $layer; } $model = class_exists($class) ? new $class($name) : new System\Model($name); } else { System\Log::record('D方法实例化没找到模型类' . $class, System\Log::NOTICE); $model = new System\Model(basename($name)); } $_model[$name . $layer] = $model; return $model; }
/** * 实例化模型类 格式 [资源://][模块/]模型 * @param string $name 资源地址 * @param string $layer 模型层名称 * @return Think\Model */ function D($name = '') { if (empty($name)) { return new Think\Model(); } static $_model = array(); $layer = C('DEFAULT_M_LAYER'); if (isset($_model[$name . $layer])) { return $_model[$name . $layer]; } $class = parse_res_name($name, $layer); if (class_exists($class)) { $model = new $class(basename($name)); } elseif (false === strpos($name, '/')) { $model = new Think\Model($name); } else { $model = new Think\Model(basename($name)); } $_model[$name . $layer] = $model; return $model; }
/** * 实例化多层控制器 格式:[资源://][模块/]控制器 * @param string $name 资源地址 * @param string $layer 控制层名称 * @param integer $level 控制器层次 * @return Think\Controller|false */ function A($name, $layer = '', $level = 0) { static $_action = array(); $layer = $layer ?: C('DEFAULT_C_LAYER'); $level = $level ?: ($layer == C('DEFAULT_C_LAYER') ? C('CONTROLLER_LEVEL') : 1); if (isset($_action[$name . $layer])) { return $_action[$name . $layer]; } $class = parse_res_name($name, $layer, $level); if (class_exists($class)) { $action = new $class(); $_action[$name . $layer] = $action; return $action; } else { return false; } }
* @param string $baseUrl 起始路径 * @param string $ext 导入的文件扩展名 * @return void */ function load($name, $baseUrl = '', $ext = '.php') { $name = str_replace(array('.', '#'), array('/', '.'), $name); if (empty($baseUrl)) { if (0 === strpos($name, '@/')) { //加载当前模块函数库 $baseUrl = MODULE_PATH . 'Common/'; $name = substr($name, 2); } else { //加载其他模块函数库 $array = explode('/', $name); $baseUrl = APP_PATH . array_shift($array) . '/Common/'; $name = implode('/', $array);
/** * A函数用于实例化控制器 格式:[资源://][模块/]控制器 * @param string $name 资源地址 * @param string $layer 控制层名称 * @param integer $level 控制器层次 * @return Controller|false */ function A($name, $layer = '', $level = '') { //$name = "User"; static $_action = array(); $layer = $layer ? $layer : C('DEFAULT_C_LAYER'); $level = $level ? $level : ($layer == C('DEFAULT_C_LAYER') ? C('CONTROLLER_LEVEL') : 1); if (isset($_action[$name . $layer])) { return $_action[$name . $layer]; } //$name = "User"; //$lay = "Controller"; //$level = 1; $class = parse_res_name($name, $layer, $level); if (class_exists($class)) { $action = new $class(); $_action[$name . $layer] = $action; return $action; } else { return false; } }
private static function newObj($name, $layer) { static $_obj = array(); $class = parse_res_name($name, $layer); if (isset($_obj[$name . $layer])) { return $_obj[$name . $layer]; } $class = parse_res_name($name, $layer); if (class_exists($class)) { $model = new $class($name); } $_obj[$name . $layer] = $model; return $model; }