2011-09-15 73 views
1

我无法装入我的自定义类亘古不变的从任何核心类扩展。 我已经把我的自定义类里面的应用程序/库的子文件夹。笨库 - 错误加载自定义类

因此,这里是我的文件夹结构

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

我一定已经尝试了所有可能的上,下类名,文件名,但错误的情况下组合是永远不变的。


通过一些答案去后,我想可能是我应该在这里增加一个基本问题 - 它是在所有可能笨内有我自己的自定义对象类型...类型,应该是相当明显的,从我的问题?


这似乎为我工作,所以这里是我会做......至少到一些突破:

在我的控制器的构造函数中,我使用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

您是否尝试过使用低级文件名并加载**数组库**; '$这 - >负载>库(阵列( 'CGH/cgh_assettype', 'CGH/cgh_asset', 'CGH/cgh_article'));'? –

+0

我已经尝试过所有可能的组合类名,文件名的大写和小写。没有工作。我试过从类名,文件名中删除Cgh_前缀。没有工作。我尝试将我的类文件移动到应用程序/库的根目录中。没有工作。目前我正在尝试require_once(APPPATH.'libraries/cgh/Cgh_assettype.php');在index.php – SIndhu

+0

顺便说一句,你正在尝试加载'cgh_assettype',但你的文件被命名为'cgh_asettype.php',你检查了吗? –

回答

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

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

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

感谢火箭。但我尝试过,努力工作。即使我只加载其中一个类,比如说$ this-> load-> library('cgh/Cgh_assettype'); 它给Cgh_assettype错误 – SIndhu

+0

也许CodeIgniter不喜欢'Cgh_'前缀?尝试删除。 –

+0

不幸的是,该功能也可以。我尝试的另一件事是将这些类文件从cgh文件夹移动到库的根目录。仍然错误仍然... – SIndhu

1

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

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

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

命名约定

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

您应该只加载一次库或其他任何东西。如果你第二次加载,你会得到这个错误。