0

myModule/Bootstrap.phpのmyModule/myFolders/myFile.phpにあるカスタムクラスを呼び出したい

これが今の様子です:

    <?php

    class Users_Bootstrap extends Zend_Application_Module_Bootstrap {

        public function _initAutoload() {
        Zend_Loader_Autoloader::getInstance()->pushAutoloader(new NAMESPACE_Excel_ExcelAutoLoader()); // This workes fine

        new Myfolder_Myfile();  // THIS IS WHERE I'm CALLING my CLASS

}

        public function _initRoutes() {

            $router = Zend_Controller_Front::getInstance()->getRouter();

             $listUsersRoute = new Zend_Controller_Router_Route("admin/users/manage", array(
               'module' => 'users',
               'controller' => 'admin',
               'action' => 'index'      ));

            $router->addRoute('listUsersRoute', $listUsersRoute);


        }     }

カスタムクラスをmyModule/Modlesフォルダーに移動し、そこから呼び出すと機能します。

Zend Bootstrapが場所を認識し、モジュールからビュー、コントローラー、モデルとして自動的にロードすることを理解しています。では、どうすればmyFolderもロードできるようになりますか?

4

1 に答える 1

1

やろうとしていることを達成する方法はたくさんあります。まず、お聞きしたいのですが、MyFolder_MyFile() クラスを多くの場所で再利用する必要はありますか? そうでない場合は、そのクラスのロジックを独自のカスタム ブートストラップ (Users_Bootstrap を拡張する) に変換することを検討してください。次に、次のようなものがあります。

MyFolder_MyFileBootstrap extends Users_Bootstrap

次に、個々の _init* メソッドを作成することを選択できます。または、記述したとおりに互換性を維持するために、最初に親を実行する新しい _initAutoload() を作成し、次に独自のロジックを実行することもできます...

MyFolder_MyFileBootstrap::_initAutoload()

public function _initAutload() {
    parent::_initAutload();
    // my own logic here
}

ただし、このソリューションによってアプリケーションのコーディング方法が大幅に変わる場合は、Zend Framework Autoloader の名前空間メソッドを使用してファイルを追加する必要があります。

あなたの例では、_initAutoloader() メソッド内でこれを試すことができます:

$applicationAutoloader = $this->getResourceLoader();
$applicationAutloader->addResourceType('myfolder', 'MyFolder', 'MyFolder');

ファイルのレイアウトによっては、これを少し調整する必要がある場合があります。

于 2013-02-03T17:27:17.543 に答える