0

私は zf1 でモジュラー レイアウトを使用しており、次のようなモジュールごとに特定のライブラリを作成したいと考えています: /application/modules/default/library

/library で一般的なライブラリを引き続き利用できるようにします

問題は、これらのフォルダーからすべてのファイルを自動的にロードするように ZF に指示する方法です。ブートストラップで次のコードで Zend_Loader_Autoloader_Resource を使用してみました

protected function _initLibrary()
{
    $resources = array(
        'basePath'          => APPLICATION_PATH . '/modules/default/library',
        'namespace'         => 'Default',
        'resourcesTypes'    => array(
            'Form' => array(
                'path'  => 'Form/',
                'namespace' => 'Form'
            )
        )
    );

    $resourceLoader = new Zend_Loader_Autoloader_Resource($resources);
}

Zend_Form を拡張するクラス Default_Form_AdminCreate を含む /application/modules/default/library/Form/AdminCreate.php にファイルを作成しました。

ただし、このクラスのインスタンスを作成しようとすると、次のエラーで失敗します: 致命的なエラー: クラス 'Default_Form_AdminCreate' が見つかりません

これは Zend_Loader_Autoloader_Resource で達成できますか、それとも何か不足していますか? ありがとう。

4

1 に答える 1

0

私は今のところうまくいく可能性のある解決策を見つけました.私はそれをここに投稿しています.おそらく他の誰かがそれを必要としています:

protected function _initModules()
{       
    $modules = scandir(APPLICATION_PATH . '/modules');
    foreach ($modules as $m) {
        if ($m != '.' && $m != '..') {
            // Adding path for library
            set_include_path(implode(PATH_SEPARATOR, array(realpath(APPLICATION_PATH . '/modules/'.$m.'/library'), get_include_path())));   
        }

        spl_autoload_register(function($classname){
            include str_replace('_', DIRECTORY_SEPARATOR, $classname) . '.php';
        });
    }
}

この関数は Bootstrap.php に配置する必要があり、モジュール ライブラリが /application/modules/*module_name*/library に保存されている場合に機能します

于 2013-07-08T12:06:22.910 に答える