我在这上面看过几个不同的帖子,但似乎没有一个对我有效。
我有一个扩展CI_Model的类:
class Users_Model extends CI_Model {
public function __construct(){
parent::__construct();
}
然后:
class Students_Model extends Users_Model {
private $_students;
public function __construct(){
parent::__construct();
$this->_students = $this->get_students();
}
然而,我接收到此错误消息:
PHP Fatal error: Class 'Users_Model' not found in /Users/rosswilson/Localhost/thedrumrooms/dreamweaver/ci/application/models/students_model.php
我已经使用require_once
将文件包含在扩展类中并且它可以正常工作。
这是最好的做法/正确的方法吗?
感谢。
答案 0 :(得分:5)
CI中的标准做法是在名为application/core
的{{1}}内创建基本模型,MY_Model.php
取决于您的配置中定义的内容。
然后在MY_
内部,您可以在该文件中定义许多可以在模型中扩展的类,基本上CodeIgniter的加载模型会在此路径和文件中查找已定义的类。
但是如果您想使用MY_Model.php
,则必须使用require_once
上定义的APPPATH
(应用程序路径)。但是,您的自定义模型仍然必须扩展index.php
,因为它使用CI模型的核心类,否则您的模型将无法工作。
ex CI_Model
添加说明:
谢谢@dean或者指出这一点。在require_once APPPATH.'/models/test.php';
文件中, 必须 为MY_Model.php
,以扩展MY_Model class
。
答案 1 :(得分:1)
您是否确保在加载Students_model之前加载了Users_model? 你可以在autoload.php配置文件中执行此操作。
答案 2 :(得分:1)
解决方案是首先在派生类中包含父模型的定义文件。
Users_Model
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Users_Model extends CI_Model {
public function __construct(){
echo("<hr><pre> L: ".__LINE__." :: :: F: ".__FILE__ . ' M: '.__METHOD__ . ' ' . date('H:i:s').' ( ) '."</pre>\n" . get_class($this) );
}
}
/* End of file Users_Model.php */
/* Location: ./application/models/Users_Model.php */
学生模型
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
include_once(APPPATH . 'models/Users_Model.php');
class Students_Model extends Users_Model {
private $_students;
public function __construct(){
parent::__construct();
echo("<hr><pre> L: ".__LINE__." :: :: F: ".__FILE__ . ' M: '.__METHOD__ . ' ' . date('H:i:s').' ( ) '."</pre>\n" . get_class($this));
}
}
/* End of file Students_Model.php */
/* Location: ./application/models/Students_Model.php */
测试用例
在某处包含
$this->load->model('Students_Model');
结果
L: 9 :: :: F: /www/application/models/Users_Model.php M: Users_Model::__construct 23:16:34 ( )
Students_Model
L: 14 :: :: F: /www/application/models/Students_Model.php M: Students_Model::__construct 23:16:34 ( )
Students_Model
屏幕截图
附录
为了在设计中获得更多结构,您可以决定将这两个类放入子文件夹models/people
中。然后,您进行如下修改:
include_once(APPPATH . 'models/people/Users_Model.php');
$this->load->model('people/Students_Model');
答案 3 :(得分:0)
将文件users_model.php放在核心目录中。然后尝试将Users_Model继承到Students_Model。