2011-09-15 20 views
1

カスタムクラスをロードできません。doesnotはどのコアクラスからも拡張できません。 カスタムクラスをapplication/libraries内のサブフォルダに配置しました。Codeigniterライブラリ - カスタムクラスの読み込み中にエラーが発生する

だからここに私のフォルダ構造は、クラスCgh_articleがCgh_asset

Cgh_asset.phpのサブクラスである

application 
    |_ libraries 
     |_ cgh 
      |_ cgh_asset.php 
      |_ cgh_article.php 
      |_ cgh_asettype.php 
    |_ controllers 
     |_ welcome.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

:要求されたクラスをロードできません クラス名、ファイル名の大文字と小文字の組み合わせですが、エラーは常に同じです。


は、いくつかの答えを通過した後、私はおそらく私がここ1つの、基本的な質問を追加すべきだと思う - 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

ファイル名を小文字にしてライブラリの配列**をロードしようとしましたか? '$ this-> load-> library(array( 'cgh/cgh_assettype'、 'cgh/cgh_asset'、 'cgh/cgh_article'));'? –

+0

クラス名、ファイル名の大文字と小文字の組み合わせを試しました。 doesnt仕事。私はクラス名、ファイル名からCgh_プレフィックスを削除しようとしました。 doesnt仕事。クラスファイルをアプリケーション/ライブラリのルートに移動しようとしました。 doesnt仕事。現在、私はrequire_once(APPPATH.'libraries/cgh/Cgh_assettype.php ')を試しています。 in 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. ファイルあなたは1行に複数のライブラリをロードしたい場合は、
  2. (オプション)$config配列
  3. $this->Renamed_library)にライブラリの名前を変更する(オプション)文字列

を読み込む使用します配列を第1パラメータとして使用します。

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

ロケットありがとうございます。しかし、私はそれを試みました。クラスのうちの1つだけをロードしたとしても、$ 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

ライブラリなどは一度だけロードする必要があります。 2回目に読み込んでいる場合は、そのエラーが発生します。

関連する問題