Codeigniter - 从模型访问控制器数据

时间:2016-09-28 16:22:31

标签: php codeigniter

我正在开发一个Codeigniter项目,我已经看到从模型中访问控制器。我想知道$ this->控制器是否与使用$ CI =&的相同或不同get_instance()。我假设没有,但我更熟悉从函数中返回数据的标准而不是这种方式。我没有看到Codeigniter这样做的例子,所以我不认为这是一种访问控制器的建议方式,但更多的是黑客攻击:

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";
    }
}

1 个答案:

答案 0 :(得分:2)

这不是CI真的,这是一个修改。它可能是正在使用的simple_HMVC。

在正常的CI使用中,模型会返回数据。

在你的应用程序的某个地方,$ controller被设置为控制器对象和CI超级对象中的别名。通过这种方式,实现了分层模块化MVC,因此可以从其他模块调用模块内的控制器方法。

看来这是否是好的做法是一个有争议的问题。这有点像黑客,但对于simple_hmvc来说,恕我直言并不是坏事,但我不会这样做。在我看来,你正在创造这样的情况:调试,单元测试甚至只是责任的明确性都会严重模糊,并且会在以后引起麻烦。