1

Codeigniter(http://codeigniter.com/)フレームワークとFlourishライブラリ(unframework)(http://flourishlib.com/)を使用してWebアプリケーションを開発しています。

繁栄するフォルダーをアプリケーションにドロップするだけで、指示に従って繁栄する初期化ファイルと構成ファイルを作成しました(これらは繁栄する自動ロードを作成します)。

これは私のフォルダ構造です:

--- auxcode \
-------- init.php
-------- config.php
-------- flourish \
--- system \
--- application \
--- public_html \

initファイルには、以下に示す構成ファイルと構成ファイルの内容のみが含まれます。

function __autoload($class_name){

{
    // Customize this to your root Flourish directory
    $flourish_root = $_SERVER['DOCUMENT_ROOT'] . '/../auxcode/flourish/';

$file = $flourish_root . $class_name . '.php';

if (file_exists($file)) {
    include $file;
    return;
}

throw new Exception('The class ' . $class_name . ' could not be loaded');

}

public_htmlでは、インデックスファイルの前に次のように追加されています。

<?php include_once($_SERVER['DOCUMENT_ROOT'] . '/../inc/init.php');

現在、それぞれの自動ロード機能(それぞれに独自の機能があるため)が競合しています。このアプリケーションは、いずれかのフレームワークの自動ロード関数(およびその依存関係)をコメントアウトした場合にのみ機能します。

オートロード機能をマージして、CIにアクセスし、同じように繁栄できるようにするにはどうすればよいですか?

または、1つのアプリケーションで両方のシステムを使用するためのより良い方法がある場合はどうでしょうか。祈って、教えて。

ありがとう。

4

3 に答える 3

4

私はFlourishの作者です。スタートページで提供しているオートローダーの例は、環境がまだない場合に、人々が立ち上がって開始するのに役立つはずです。

あなたの場合、複数のライブラリがあるので、spl_autoload_register()を使用することをお勧めします。CIオートローダーを登録してから、Flourishオートローダーを登録できます。

于 2010-10-01T01:30:28.813 に答える
2

カスタム__autoload関数を作成します。CIオリジナルの名前を__autoload_ciとFlourish__autoload_flourishに変更します。

return true;成功した場合は、両方の元のオートローダーにを追加することが重要です。エラー/例外を削除します。次に、カスタムラッパーをデプロイします。

 function __autoload($class) {
     __autoload_ci($class) || __autoload_flourish($class);
 }

または、spl_autoload_registerを使用します

于 2010-09-29T15:47:32.067 に答える
1

http://codeigniter.com/forums/viewthread/73804/#366081と、ツイッターでフォローしているCIの人々からの情報に感謝します(私はemに尋ねました): Eric BarnesDan HorriganPhil SturgeonZack Kitzmiller、解決策を見つけました。あなたが私のようなCodeIgnitern00bであるなら、あなたはこれらの人をフォローしたいかもしれません。

init.phpとconfig.phpを削除してから、CIのconfig.phpの下部に以下を詰め込みました(mylibraryというカスタムライブラリからも自動ロードしています)。

function multi_auto_require($class) {
if(stripos($class, 'CI') === FALSE && stripos($class, 'PEAR') === FALSE) {
    foreach (array('flourish', 'mylibrary') as $folder){
        if (is_file(APPPATH."../auxengines/{$folder}/{$class}.php")){
            include_once APPPATH."../auxengines/{$folder}/{$class}.php";
        }
    }
}
}

spl_autoload_register('multi_auto_require');

見事に動作します。ありがとう、人々!

于 2010-10-04T09:55:39.033 に答える