2

Users モジュールなど、いくつかのモジュールを使用して Zend Framework MVC アプリケーションを開発しています。任意のモジュール/コントローラー操作で使用できるモデル クラス名「Users_Model_User」があります。しかし、アプリケーションの Bootstrap クラスでそのモデルのインスタンスを使用する必要がありますが、そこで例外が発生します。

致命的なエラー: クラス 'Users_Model_User' が /my/path/... に見つかりません

モジュールごとに Bootstrap クラスがあります。

class Users_Bootstrap extends Zend_Application_Module_Bootstrap {

    protected function _initAutoloader() {
        $autoloader = new Zend_Application_Module_Autoloader(array(
                    'namespace' => 'Users_',
                    'basePath' => APPLICATION_PATH . '/modules/users'
                ));

        return $autoloader;
    }

}

そして、私が言ったように、モジュールは問題なく動作しています (リクエストの受信、処理、および応答の返し)。モデルクラスなどのデフォルトのモジュールリソースのロードを処理するモジュールブートストラップクラスにより、これはうまく機能すると思います。しかし、メインの Bootstrap クラスは、"Users" モジュール モデル クラスにアクセスできないようです。

4

2 に答える 2

3

Users_Bootstrapアプリケーションのブートストラップ後に実行されます。つまり、_initAutoloader()メソッドはアプリケーションのブートストラップでまだ実行されていません。

解決策は、コードを_initAutoloader()メインのブートストラップに移動することです。これであなたの問題は解決します!メイン ブートストラップのコード部分をモジュール ブートストラップにすることもできます。すべてのモジュールのブートストラップは、現在要求されているモジュールとは無関係に、常に呼び出されることに注意してください。

また、 ZF でのブートストラップ プロセスに関するこの記事を共有させてください。お役に立てば幸いです ;)

于 2012-04-18T07:52:44.913 に答える
1

あなたは試すことができます(それがうまくいくかどうかはわかりません)

protected function __initSomething()
{
   $this->bootstrap('autoload');
   $model = new Users_Model_User();
   ...
}

ブートストラップはmysqlクエリを実行するのに適した場所ではないと思います。リソースが開始され、ブートストラップの自動ロードが機能しているように、を使用する必要がありますZend_Controller_Plugin_Abstract(プラグインを使用してクエリを実行し、アクセス許可を確認しています... )。

于 2012-04-18T07:55:22.520 に答える