1

3時間の調査の後、これに似たものを見つけることができなかったため、必要なものを示す簡単な例を書き留めます。

で始まるすべてのクラスがありProject_ます。例えば。Project_BaseControllerベースコントローラークラスです。

は( のパスの 1 つ) にBaseController.phpありますが、オートローダは で検索します。/www/Core/set_include_path/www/Core/Project/

/www/Core/で始まるすべてのクラスのパスを設定したいと思いProject_ます(その後、次のように名前を付けた後にファイルを見つける必要がありますProject_User => /www/Core/User.php:)

多分Zend_Loader_Autoloader_Resource私が必要なものですか?

リソースの種類のグローバル構成ではないため、私はそれを疑っています。

4

2 に答える 2

1

クラスに名前を付ける方法は、ZF が採用した PSR-0 原則に違反しています。PSR-0 に従う方が簡単です。この場合、後は Project_ クラスを Project ディレクトリに再配置するだけです。

于 2012-09-28T09:01:15.530 に答える
0

この回答で使用されているアプローチが役立つ場合があります。カスタムオートローダーがここに行く方法のようです。–</p>

次の行を application.ini に追加します。

autoloadernamespaces[] = "App_"

これを調整して、ライブラリファイルを保持していた場合、私はlibrary/App.

次のように、App/Loader/Autoloader/Project.php でオートローダーを作成します。

class App_Loader_Autoloader_Project implements Zend_Loader_Autoloader_Interface
{
    public function autoload($class)
    {
        $project = explode('_', $class);
        if ($project[0] != 'Project'){
            return false;
        }
        $project[0] = '/www/core';
        require_once implode('/', $project) . '.php'
        return $class;
    }
}

ブートストラップでオートローダーを初期化します:-

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{
    protected function _initAutoloading() {
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->pushAutoloader(new App_Loader_Autoloader_Project());
    }
}

明らかに、私はあなたの環境に一致する環境を持っていないので、これをテストすることはできません. ただし、私自身のオートローダーの使用から適応させたので、あまり調整しなくても動作するはずです。

David Weinraub によって投稿された回答のおかげで、私はもともとこの手法に出会い、それ以来非常に便利であることがわかりました。

そうは言っても、akondの答えは良いアドバイスであり、好ましい選択肢です。フレームワークに反対するのではなく、フレームワークと連携します。選択肢がない場合に備えて、この回答を提供します。

于 2012-09-29T09:17:37.810 に答える