Codeigniter - 从模型访问控制器数据
Posted
技术标签:
【中文标题】Codeigniter - 从模型访问控制器数据【英文标题】:Codeigniter - access controller data from model 【发布时间】:2017-02-06 17:59:39 【问题描述】:我正在开发一个 Codeigniter 项目,我已经看到从模型中访问控制器。我想知道 $this->controller 是否与使用 $CI =& get_instance() 相同或不同。我假设没有,但我比这种方式更熟悉从函数返回数据的标准。我还没有看到 Codeigniter 的例子这样做,所以我不认为这是访问控制器的建议方式,但更多的是 hack:
class my_model extends CI_Model
public function __construct()
$this->errors = array();
parent::__construct();
$this->controller = get_instance();
public function somefunc()
// Accessing controller
$this->controller->session->set_userdata('foo', 'bar');
$this->controller->data = "fubar";
【问题讨论】:
我认为这是反模式。控制器应该是控制逻辑的那个。您可以通过从模型函数获取返回来做到这一点。 是的,同意@phiter。但是您仍然想访问然后尝试 $this->controller =& get_instance();在此处查找详细答案:***.com/a/4740548/1578380 【参考方案1】:这真的不是 CI,这是一个修改。使用的可能是 simple_HMVC。
在正常的 CI 使用中,模型会返回数据。
在您的应用程序的某处,$controller 被设置为控制器对象和 CI 超级对象中的别名。通过这种方式实现了分层模块化MVC,因此模块内的控制器方法可以从其他模块调用。
这是否是好的做法似乎是一个有争议的问题。这有点骇人听闻,但对于 simple_hmvc 来说,恕我直言,这不一定是坏事,但我不会这样做。在我看来,您正在创造这样的情况:调试、单元测试甚至只是职责的明确性都被严重模糊,并且会在以后造成麻烦。
【讨论】:
以上是关于Codeigniter - 从模型访问控制器数据的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter:在每个库中加载模型或将模型从控制器内“传递”到库中
如何将结果从模型传递到 CodeIgniter 中的控制器?