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