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


Undefined property when calling function from model

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

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()C:''examplep''htdocs''tools_v2''application''controllers''shortlinks.php第35行

我搜索了StackOverflow,最终得到了这个答案,但我意识到我不想为我的控制器的每个功能都这样,我不应该添加

$logic = new shortlinks_logic();

并通过调用所有内容

$logic->function();

因为我知道我可以在加载时给模型一个别名

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

并使用

$this->logic->test();

我需要在每个函数中创建一个新对象是有原因的吗?有办法解决这个问题吗

我知道我可以自动加载所有型号,这是一种选择,但如果可能的话,我想避免这种情况,因为不是每个人都能访问所有型号,而且有相当多的型号,所以我希望某些型号能交给某些用户(因此我想在控制器内加载)。

我知道这是相当长的(抱歉),所以我大胆地提出了这个问题。

测试您的代码并完美工作:-在application/models 下创建模型文件的文件名shortlinks_logic.php

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(); 
  }
}

你就会完美地工作。

也许您的模型加载不正确。。。

试试这个:

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

我弄清楚了问题出在哪里。

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

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

之前

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

我必须先加载模型。

例如:

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