在 CodeIgniter 中扩展模型
Extends Model in CodeIgniter
嗯,我是 CodeIgniter Framework 的新手,我正在尝试构建一个通用模型 Class。参见:
class Basic_Model extends CI_MODEL {
function __construct() {
// Call the Model constructor
parent::__construct();
}
}
我想扩展所有基于 Basic_Model 的模型,如下所示:
class Pagina_Model extends Basic_Model {
function __construct() {
// Call the Model constructor
parent::__construct();
}
}
问题是当我尝试从控制器调用 "pagina_model" 时出现以下错误:
Fatal error: Class 'Basic_Model' not found in /var/www/myproject/application/models/pagina_model.php on line 12
如果我在控制器中使用 "basic_model",一切正常。
编辑 1:
我在“/application/core”中创建了一个名为 MY_Basic_Model.php 的文件,并将 class 名称更改为 "MY_Basic_Model"。但是我得到了错误:
Fatal error: Class 'MY_Basic_Model' not found in /var/www/myproject/application/models/pagina_model.php on line 12
为此你必须创建核心系统类(这也称为方法覆盖)。
在 application/core/
目录中创建一个文件 MY_Model.php
,它将 扩展 基数CI_Model
class:
<?php
class MY_Model extends CI_Model {
function __construct()
{
parent::__construct();
}
}
现在您可以在您的模型中扩展它 (../applicaton/models/):
<?php
class Pagina_Model extends MY_Model {
function __construct()
{
parent::__construct();
}
}
这里有几点需要注意:
1) class 声明必须扩展父 class.
2) 您的新 class 名称和文件名必须以 MY_ 为前缀(此项是可配置的)。
配置方式:
要设置您自己的子 class 前缀,请打开您的 application/config/config.php 文件并查找此项:
$config['subclass_prefix'] = 'MY_';
文档:
https://ellislab.com/codeigniter/user-guide/general/core_classes.html
你可以这样做。
假设您的模型文件夹中有 basic_model.php。
现在添加您编写的 class Basic_Model
的代码
class Basic_Model extends CI_MODEL {
function __construct() {
// Call the Model constructor
parent::__construct();
}
}
现在在模型文件夹中创建一个 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();
}
}
希望这能解决您的问题
你可以这样做...MY_ 模型真的很好,但如果你希望子模型扩展不同的子模型,你总是可以这样做:
require(APPPATH.'models/Other_model.php');
class New_model extends Other_Model {
在我的实例中 Other_Model 实际上扩展了 MY_model。
嗯,我是 CodeIgniter Framework 的新手,我正在尝试构建一个通用模型 Class。参见:
class Basic_Model extends CI_MODEL {
function __construct() {
// Call the Model constructor
parent::__construct();
}
}
我想扩展所有基于 Basic_Model 的模型,如下所示:
class Pagina_Model extends Basic_Model {
function __construct() {
// Call the Model constructor
parent::__construct();
}
}
问题是当我尝试从控制器调用 "pagina_model" 时出现以下错误:
Fatal error: Class 'Basic_Model' not found in /var/www/myproject/application/models/pagina_model.php on line 12
如果我在控制器中使用 "basic_model",一切正常。
编辑 1:
我在“/application/core”中创建了一个名为 MY_Basic_Model.php 的文件,并将 class 名称更改为 "MY_Basic_Model"。但是我得到了错误:
Fatal error: Class 'MY_Basic_Model' not found in /var/www/myproject/application/models/pagina_model.php on line 12
为此你必须创建核心系统类(这也称为方法覆盖)。
在 application/core/
目录中创建一个文件 MY_Model.php
,它将 扩展 基数CI_Model
class:
<?php
class MY_Model extends CI_Model {
function __construct()
{
parent::__construct();
}
}
现在您可以在您的模型中扩展它 (../applicaton/models/):
<?php
class Pagina_Model extends MY_Model {
function __construct()
{
parent::__construct();
}
}
这里有几点需要注意:
1) class 声明必须扩展父 class.
2) 您的新 class 名称和文件名必须以 MY_ 为前缀(此项是可配置的)。
配置方式:
要设置您自己的子 class 前缀,请打开您的 application/config/config.php 文件并查找此项:
$config['subclass_prefix'] = 'MY_';
文档:
https://ellislab.com/codeigniter/user-guide/general/core_classes.html
你可以这样做。
假设您的模型文件夹中有 basic_model.php。
现在添加您编写的 class Basic_Model
的代码
class Basic_Model extends CI_MODEL {
function __construct() {
// Call the Model constructor
parent::__construct();
}
}
现在在模型文件夹中创建一个 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();
}
}
希望这能解决您的问题
你可以这样做...MY_ 模型真的很好,但如果你希望子模型扩展不同的子模型,你总是可以这样做:
require(APPPATH.'models/Other_model.php');
class New_model extends Other_Model {
在我的实例中 Other_Model 实际上扩展了 MY_model。