2016-09-28 198 views
0

我正在研究Codeigniter项目,并且我已经看到从模型访问控制器。我想知道$ this-> controller是否与使用$ 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"; 
    } 
} 
+4

我认为这是反模式。控制器应该是控制逻辑的控制器。你可以通过从模型函数获取返回值来实现。 – Phiter

+0

同意@phiter。但你仍然想访问然后尝试$ this-> controller =&get_instance();在这里找到详细的答案:http://stackoverflow.com/a/4740548/1578380 – Chintan7027

回答

2

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

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

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

看来,这是否是好的做法是一个有争议的问题。这有点破解,但对于simple_hmvc这不是一个不好的恕我直言,但我不会这样做。在我看来,你正在创造一些情况,调试,单元测试或者责任清晰度都被严重模糊,并且会在后来造成麻烦。

相关问题