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 中的控制器?

如何从辅助函数访问模型以查询数据库?

无法在 Codeigniter 中从模型获取查询结果到控制器

将数组从控制器传递到 codeigniter 中的模型

将数组从模型组合并返回到控制器 - CodeIgniter