D 方法实例化 Model 时查找 Model 的问题
🏷️ ThinkPHP
版本是 ThinkPHP3.2.2
如果当前模块名是 Test
,使用 D('test_test')
时查找的 Class 名是 Test/Model/TestTestModel
;
当 Test/Model 下没有对应的 Model,自动去 Common 目录下查找时,查找的 class 名却是 Common/Model/test_testModel
。
对应方法
暂时的对应方法是将 '\\Common\\'.$layer.'\\'.$name.$layer
改为 '\\Common\\'.$layer.'\\'.parse_name($name, 1).$layer
。
修改后 D
方法
php
/**
* 实例化模型类 格式 [资源://][模块/] 模型
* @param string $name 资源地址
* @param string $layer 模型层名称
* @return Model
*/
function D($name='',$layer='') {
if(empty($name)) return new Think\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;
$class = '\\Common\\'.$layer.'\\'.parse_name($name, 1).$layer;
}
$model = class_exists($class)? new $class($name) : new Think\Model($name);
}else {
Think\Log::record('D方法实例化没找到模型类'.$class,Think\Log::NOTICE);
$model = new Think\Model(basename($name));
}
$_model[$name.$layer] = $model;
return $model;
}
相关链接