Я не могу загрузить свой пользовательский класс, который не выходит из какого-либо базового класса.
Я поместил свой пользовательский класс в подпапку внутри приложения / библиотеки.
Так вот моя структура папок
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";
}
?>
Контроллер 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');
}
}