我正在开发一个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";
}
}
答案 0 :(得分:2)
这不是CI真的,这是一个修改。它可能是正在使用的simple_HMVC。
在正常的CI使用中,模型会返回数据。
在你的应用程序的某个地方,$ controller被设置为控制器对象和CI超级对象中的别名。通过这种方式,实现了分层模块化MVC,因此可以从其他模块调用模块内的控制器方法。
看来这是否是好的做法是一个有争议的问题。这有点像黑客,但对于simple_hmvc来说,恕我直言并不是坏事,但我不会这样做。在我看来,你正在创造这样的情况:调试,单元测试甚至只是责任的明确性都会严重模糊,并且会在以后引起麻烦。