
首先在此前的版本3.*的时候调用是使用A方法实现的,如下:
$IndexController = A("index"); return $IndexController->index();而在tp5的时候,取消的A方法,取而代之的是controller,其方法代码为:
/** * 用于实例化访问控制器 * @param string $name 控制器名 * @param string $path 控制器命名空间(路径) * @return Think\Controller|false */ function controller($name,$path=''){ $layer = C('DEFAULT_C_LAYER'); if(!C('APP_USE_NAMESPACE')){ $class = parse_name($name, 1).$layer; import(MODULE_NAME.'/'.$layer.'/'.$class); }else{ $class = ( $path ? basename(ADDON_PATH).'\\'.$path : MODULE_NAME ).'\\'.$layer; $array = explode('/',$name); foreach($array as $name){ $class .= '\\'.parse_name($name, 1); } $class .= $layer; } if(class_exists($class)) { return new $class(); }else { return false; } }同时在同一个控制器下的使用是如下方式:
$index = controller('Index'); return $index->index();在不同的控制器或者模块下的使用是如下的情况:
$cont = controller('module/controller'); // 模块名/控制器名 $cont->function($params); // 控制器下的function 并传入参数即可
但是上面的方式存在一个问题,就是跨模块调用的时候,在被调用的控制器的里面使用model的时候,如果更新的时候,使用如下代码会出现一个问题:
$rs = (new Model)->save($data,$condition); //提示save方法不不存在那就需要使用地下的方式:
$rs = $model ->allowField(true) ->isUpdate(true,['out_trade_no'=>$out_trade_no]) ->save(['status'=>1,'pay_time'=>time()]); // 亲测有效个人的总结,如果有不对的地方,还望不吝指出,感谢

我的微信:graent_hu
欢迎扫码加我的微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~
转载请注明出处:
本文标题:ThinkPHP5垮模块调用控制器使用controller的方法
本文链接:https://www.wlyc.cn/post-177.html
发表评论