在CodeIgniter中扩展模型

She*_*lly 4 php codeigniter

好吧,我是CodeIgniter Framework的新手,我正在尝试构建一个通用的Model Class.看到:

class Basic_Model extends CI_MODEL {

    function __construct() {
        // Call the Model constructor
        parent::__construct();
    }

}
Run Code Online (Sandbox Code Playgroud)

我想基于Basic_Model扩展所有模型,如下所示:

class Pagina_Model extends Basic_Model {

    function __construct() {
        // Call the Model constructor
        parent::__construct();
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试从Controller调用"pagina_model"时出现以下错误:

Fatal error: Class 'Basic_Model' not found in /var/www/myproject/application/models/pagina_model.php on line 12
Run Code Online (Sandbox Code Playgroud)

如果我在控制器中使用"basic_model"一切正常.

编辑1:

我在"/ application/core"中创建了一个名为MY_Basic_Model.php的文件,并将类名更改为"MY_Basic_Model".但我得到了错误:

Fatal error: Class 'MY_Basic_Model' not found in /var/www/myproject/application/models/pagina_model.php on line 12
Run Code Online (Sandbox Code Playgroud)

Par*_*us- 6

为此,您必须创建Core System Classes(这也称为Method Overriding).

MY_Model.phpapplication/core/目录中创建一个扩展CI_Model类的文件:

<?php
class MY_Model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以在模型中扩展它(../applicaton/models/):

<?php
class Pagina_Model extends MY_Model {

    function __construct()
    {
        parent::__construct();
    }
}
Run Code Online (Sandbox Code Playgroud)


这里有几点需要注意:
1)类声明必须扩展父类.
2)您的新班级名称和文件名必须以MY_为前缀(此项目是可配置的).


如何配置:
要设置自己的子类前缀,请打开application/config/config.php文件并查找此项:

$config['subclass_prefix'] = 'MY_';
Run Code Online (Sandbox Code Playgroud)


文档:https :
//ellislab.com/codeigniter/user-guide/general/core_classes.html


小智 6

您可以这样进行。
假设您的模型文件夹中有basic_model.php。现在添加class Basic_Model您编写的代码

class Basic_Model extends CI_MODEL {

  function __construct() {
    // Call the Model constructor
    parent::__construct();
  }

}
Run Code Online (Sandbox Code Playgroud)

现在,在模型文件夹中创建一个pagina_model.php,并添加您编写的代码。只需像波纹管一样包含第一行

<?php
  require APPPATH.'/models/basic_model.php';//just add this line and keep rest 
  class Pagina_Model extends Basic_Model {

      function __construct()
      {
          parent::__construct();
      }
   }
Run Code Online (Sandbox Code Playgroud)

希望这能解决您的问题


Ant*_*ony 5

你可以这样做...... MY_ 模型真的很好,但如果你希望一个子模型扩展一个不同的子模型,你总是可以这样做:

require(APPPATH.'models/Other_model.php');
class New_model extends Other_Model {
Run Code Online (Sandbox Code Playgroud)

在我的实例中,Other_Model 实际上扩展了 MY_model。