我无法加载不从任何核心类扩展的自定义类。 我已将自定义类放在应用程序/库中的子文件夹中。
所以这是我的文件夹结构
application
|_ libraries
|_ cgh
|_ cgh_asset.php
|_ cgh_article.php
|_ cgh_asettype.php
|_ controllers
|_ welcome.php
Cgh_article类是Cgh_asset的子类
Cgh_asset.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
abstract class Cgh_asset
{
public $id;
public $type;
public $title;
public $content;
public $user;
abstract public function generate_url();
function __construct()
{
$this->generate_url();
}
}
?>
Cgh_article.php:
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Cgh_article extends Cgh_asset
{
function __construct()
{
parent::__construct();
$this->type=Cgh_assettype::article;
}
function generate_url()
{
$this->url="Article_URL";
}
}
?>
Cgh_assettype.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Cgh_assettype
{
const type1="type1";
const type2="type2";
const article="article";
}
?>
Controller welcome.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->library('cgh/Cgh_assettype','cgh/Cgh_asset','cgh/Cgh_article');
$this->load->view('welcome_message');
}
}
我得到的错误是: 无法加载请求的类:Cgh_assettype
我必须尝试过所有可能的类名,文件名的大小写组合,但错误总是一样的。
在经过一些答案之后,我想我可能会在这里添加一个基本问题 - 在codeigniter中是否有可能拥有自己的自定义对象类型......从我的问题中应该是非常明显的?
这似乎对我有用,所以这就是我将要做的事情......至少在出现问题之前:
在我的控制器的构造函数中,我对我的类使用require_once ...好的是我可以将所有类合并到一个文件中 - 我的类最初只是在一个文件中 - 这是我的控制器在更改之后,这有效:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public $cgh_assettype;
public $cgh_asset;
public $cgh_article;
function __construct()
{
parent::__construct();
//$this->load->library(array('cgh/cgh_assettype','cgh/cgh_asset','cgh/cgh_article'));
echo "Including CGH<br />";
echo "<p>Apppath is ". APPPATH. "</p>";
require_once(APPPATH.'libraries/cgh/Cgh_assettype.php');
require_once(APPPATH.'libraries/cgh/Cgh_asset.php');
require_once(APPPATH.'libraries/cgh/Cgh_article.php');
}
public function index()
{
$iCgh_article=new Cgh_article();
echo "<p>$iCgh_article->url</p>";
$this->load->view('welcome_message');
}
}
答案 0 :(得分:1)
您需要为每个库调用$this->load->library
。
$this->load->library('cgh/Cgh_assettype');
$this->load->library('cgh/Cgh_asset');
$this->load->library('cgh/Cgh_article');
$this->load->library
需要3个参数。
$config
数组$this->Renamed_library
)如果要在一行上加载多个库,请使用数组作为第一个参数。
$this->load->library(array('cgh/Cgh_assettype','cgh/Cgh_asset','cgh/Cgh_article'));
答案 1 :(得分:1)
库文件名是否大写? (您提交的文件夹结构表明它们不是)。
我不知道在子目录中有库,但我知道文件名需要大写。
http://codeigniter.com/user_guide/general/creating_libraries.html
命名约定
答案 2 :(得分:0)
您应该只加载库或其他任何内容。如果您第二次加载,则会出现该错误。