Codeigniter库 - 加载自定义类时出错

时间:2011-09-15 20:57:34

标签: php codeigniter

我无法加载从任何核心类扩展的自定义类。 我已将自定义类放在应用程序/库中的子文件夹中。

所以这是我的文件夹结构

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');
    }
}

3 个答案:

答案 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个参数。

  1. 要加载的文件
  2. (可选)$config数组
  3. (可选)将库重命名为($this->Renamed_library
  4. 的字符串

    如果要在一行上加载多个库,请使用数组作为第一个参数。

    $this->load->library(array('cgh/Cgh_assettype','cgh/Cgh_asset','cgh/Cgh_article'));
    

答案 1 :(得分:1)

库文件名是否大写? (您提交的文件夹结构表明它们不是)。

我不知道在子目录中有库,但我知道文件名需要大写。

http://codeigniter.com/user_guide/general/creating_libraries.html

命名约定

  • 文件名必须大写。例如:Myclass.php
  • 类声明必须大写。例如:class Myclass
  • 班级名称和文件名必须匹配。

答案 2 :(得分:0)

您应该只加载库或其他任何内容。如果您第二次加载,则会出现该错误。