我目前正在使用CodeIgniter。
我的前端控制器根据他获得的输入加载1个库中的1个。
两个图书馆都需要访问该模型。
我的问题:
我应该在每个库中加载模型(加上每个库中的CI的get_instance()甚至可以访问CI加载函数)还是有任何“更好”的解决方案来加载模型在Frontcontroller中并将模型“传递”到一个或另一个图书馆。我甚至检查自动加载可能性,但即便如此,我也没有从图书馆内直接访问。
我想这不是在每个库中加载模型的最佳解决方案(比如,如果我需要更多的库等等),但我现在有点卡住.. :-(
简而言之:
- 在FrontController中加载模型,并可能将模型“传递”为我需要的任何库的参数?
- 或者在任何库中获取CI的实例然后加载模型(并编写冗余代码)
- 还是有更好的解决方案吗?
我选择:
公共职能__construct()
{
$ this-> ci_instance =& get_instance();
$这 - > ci_instance->负载>模型( 'my_model');
$ this-> _model = $ this-> ci_instance-> my_model;
}
然后使用这样的功能:
$ mysql_result = $ this-> _model-> get_testdata();
它比坦克auth lib的解决方案略短(但几乎相同)。 :-) 但Tank Auth Lib也帮助了我(看看专业人士是如何做到的)。 那也是dm03514!
答案 0 :(得分:0)
get_instance是官方文档建议的本地方式:
为了更方便地访问模型对象,我将在您的库中定义一个属性:
public $_model = FALSE;
你图书馆的某个地方:
$CI =& get_instance();
$CI->load->model('model_name');
$this->_model = $CI->model_name;
然后您可以通过调用$this->_model->method();
答案 1 :(得分:0)
每当我遇到这样的大问题时,我通常会看一些流行的库,例如Tank Auth
。库/模型在类中加载。这使你的图书馆自给自足,并且不受你的影响因素的影响。
在已加载库之后重新加载库只是Loader.php
中的一个条件,并且性能不高。