如何在codeigniter挂钩文件中加载我的模型

时间:2010-07-29 21:06:48

标签: codeigniter

这是我的问题。我正在构建一个需要过滤器的应用程序。我已经让过滤系统工作了,我甚至可以确定我想要访问的实际方法。问题是我无法从过滤器文件访问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。我的代码也很完美。谢谢,但我仍然对您的解决方案感兴趣。

2 个答案:

答案 0 :(得分:3)

$ci=&get_instance();

$ci->load->model("auth");

$ci->auth->login();

您可以在钩子文件中获取或访问模型。

答案 1 :(得分:1)

在加载和创建事物的时候,codeigniter有很多奇怪之处。在钩子方面,你经常会发现库/助手/配置/模型没有被加载,直到后控制器构造它在很多情况下都会很麻烦(比如这个)。

尝试将此挂钩称为后置控制器构造。那时你肯定能够访问ci实例,但我不确定访问模型。

另请注意,模型应该只能从内部控制器中加载/使用(这是它们可能无法在预控制器挂钩中工作的一个原因)。 Codeigniter和许多程序员通过在库中创建类似行为的模型(例如会话库)来解决这个问题。