当我尝试加载模型时,我没有遇到任何问题。代码如下(在控制器中):
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");