从模型调用函数时的未定义属性

时间:2014-10-09 11:43:56

标签: php codeigniter object

当我尝试加载模型时,我没有遇到任何问题。代码如下(在控制器中):

applications/controllers/shortlinks.php

public function __construct() {
    parent::__construct();
    $this->load->library("logged");
    $this->load->model("shortlinks_logic"); //This model I'm interested in
}

例如,shortlinks_logic模型的代码如下:

applications/models/shortlinks_logic.php

class Shortlinks_logic extends CI_Model {

    public function test() {
        echo "TEST";
    }

}

也没有问题。但是,当我尝试在控制器中调用此函数时:

public function something($argument_one, $argument_two) {
    $this->shortlinks_logic->test(); //Line 35 of following error
}

我收到此错误:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义属性:Shortlinks :: $ shortlinks_logic

     

文件名:controllers / shortlinks.php

     

行号:35   致命错误:在非对象中调用成员函数test()   第35行 C:\ xampp \ htdocs \ tools_v2 \ application \ controllers \ shortlinks.php

我搜索了StackOverflow,最终来到了this answer,但我意识到我不想为控制器的每个功能做这个,我不应该添加

$logic = new shortlinks_logic();

并通过

调用所有内容
$logic->function();

因为我知道无论如何我都可以给模型加载别名

$this->load->model("shortlinks_logic", "logic");

并使用

$this->logic->test();

我有必要在每个函数中创建一个新对象吗?有没有办法解决这个问题?

我知道我可以自动加载所有可选的模型,但我想尽可能避免这种情况,因为不是每个人都可以访问所有模型而且有很多模型,所以我想要某些模型去某些用户(因此我想在控制器内部加载)。

我明白这是非常冗长的(道歉)所以我加粗了问题。

3 个答案:

答案 0 :(得分:0)

测试您的代码并完美运行: - 在shortlinks_logic.php

下创建了模型文件的文件名application/models
class Shortlinks_logic extends CI_Model {
    public function test() {
        echo "TEST";
    }
}

我的控制器shortlinks.php

<?php if (!defined('BASEPATH'))exit('No direct script access allowed');
class Shortlinks extends CI_Controller {
  public function __construct() {
    parent::__construct();
    $this->load->model("shortlinks_logic"); 
  }
  public function something() {
    $this->shortlinks_logic->test(); 
  }
}

你会完美地工作。

答案 1 :(得分:0)

也许你的模型没有正确加载......

试试这个:

public function __construct() {

    $this->load->library("logged");
    $this->load->model("shortlinks_logic");
    parent::__construct();
}

答案 2 :(得分:0)

我弄清楚问题是什么。

出于某种原因,它不允许我加载

$this->load->library("logged");

$this->load->model("shortlinks_logic");

我必须先加载模型。

例如:

$this->load->model("shortlinks_logic");
$this->load->library("logged");