CodeIgniter:在每个库中加载模型或将模型从控制器内“传递”到库中

Posted

技术标签:

【中文标题】CodeIgniter:在每个库中加载模型或将模型从控制器内“传递”到库中【英文标题】:CodeIgniter: load model in each library or kind of 'pass' the model from within the controller to a library 【发布时间】:2012-10-27 14:14:38 【问题描述】:

我目前正在使用 CodeIgniter。 我的前端控制器根据他获得的输入加载 2 个库中的 1 个。 这两个库都需要访问模型。 我的问题: 我应该在每个库中加载模型(加上每个库中 CI 的 get_instance() 甚至可以访问 CI 加载函数)还是有任何“更好”的解决方案可以在 Frontcontroller 中加载模型并将模型“传递”到一个或另一个库。我什至检查了自动加载的可能性,但即便如此我也无法从库中直接访问。 我想这不是在每个库中加载模型的最佳解决方案(例如,如果我需要更多库等等),但我现在有点卡住了.. :-( 简而言之: - 在 FrontController 中加载模型,并可能将模型作为参数“传递”给我需要的任何库? - 或在任何库中获取 CI 实例,然后加载模型(并编写冗余代码) - 还是有更好的解决方案?

提前谢谢 :-)

编辑:

我选择: 公共函数 __construct() $this->ci_instance =& get_instance(); $this->ci_instance->load->model('my_model'); $this->_model = $this->ci_instance->my_model;

然后使用如下函数: $mysql_result = $this->_model->get_testdata();

它比 tank auth lib 中的解决方案短一点(但几乎相同)。 :-) 但是 Tank Auth Lib 也帮助了我(看看专业人士是如何做到的)。 也谢谢 dm03514!

【问题讨论】:

【参考方案1】:

get_instance 是官方文档建议的原生方式:

为了更方便地访问模型对象,我将在您的库中定义一个属性:

public $_model = FALSE;

在您的图书馆建设者的某个地方:

$CI =& get_instance();
$CI->load->model('model_name');
$this->_model = $CI->model_name;

然后你可以通过调用$this->_model->method();在任何库方法中访问模型

【讨论】:

【参考方案2】:

每当我有这样的大问题时,我通常会查看一些流行的库,例如Tank Auth。库/模型在类中加载。这使您的图书馆自给自足和封闭,这不依赖于您的 intiliaztion 参数。

在已经加载的库之后重新加载它只是Loader.php 中的一个条件,并且不会影响性能。

【讨论】:

感谢其他信息(Tank Auth Lib / Loader.php)! :-)

以上是关于CodeIgniter:在每个库中加载模型或将模型从控制器内“传递”到库中的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter - 只能在 autoload.php 中加载模型

在 codeigniter 的控制器中加载模型时出错消息:未定义的属性:Cart::$load

CodeIgniter:在控制器中加载控制器

CodeIgniter - 如何在项目中加载 stripe-php 库?

如何在每个页面中加载 CodeIgniter 助手?

在 NavigationView 中加载视图的标准方法是啥,每个视图都拥有一个从 API 填充的模型?