这是我的问题。我正在构建一个需要过滤器的应用程序。我已经让过滤系统工作了,我甚至可以确定我想要访问的实际方法。问题是我无法从过滤器文件访问CI核心。我在网上搜索过,虽然我发现了一些建议的解决方案,比如“Dipping into CI”,但不推荐使用它们,因为它们会导致PHP应用程序不稳定。
我的应用程序中的示例过滤器如下所示
class Trust_filter extends Filter {
function before() {
$this -> ci = &get_instance();
if ($this -> ci -> auth -> is_user_active()) {
$this -> ci -> load -> model("trust_model", "trustmanager");
if ($this -> trustmanager -> verify()) {
echo "##090##";
}
}
}
}
上述代码不起作用,因为CI对象是非对象。我无法得到一个实例,我已经花了整整一夜没有成功。我正在使用CodeIgniter 1.7.1。任何帮助将不胜感激。
编辑:我找到了问题的答案。在创建构造函数之后,我将过滤器系统扩展为工作,以确保我可以访问CI superobject。我的代码也很完美。谢谢,但我仍然对您的解决方案感兴趣。
答案 0 :(得分:3)
$ci=&get_instance();
$ci->load->model("auth");
$ci->auth->login();
您可以在钩子文件中获取或访问模型。
答案 1 :(得分:1)
在加载和创建事物的时候,codeigniter有很多奇怪之处。在钩子方面,你经常会发现库/助手/配置/模型没有被加载,直到后控制器构造它在很多情况下都会很麻烦(比如这个)。
尝试将此挂钩称为后置控制器构造。那时你肯定能够访问ci实例,但我不确定访问模型。
另请注意,模型应该只能从内部控制器中加载/使用(这是它们可能无法在预控制器挂钩中工作的一个原因)。 Codeigniter和许多程序员通过在库中创建类似行为的模型(例如会话库)来解决这个问题。