2011-05-18 8 views
0

私はZend Frameworkで始まっています。現在、Zend_Loader_PluginLoaderに問題があります。Zend Framework - Zend_Loader_PluginLoader

私は、次のコードを使用して簡単に十分な作業モジュールの特定のプラグインを取得するために管理:

class Api_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 
    protected function _initPlugins() 
    { 
     $loader = new Zend_Loader_PluginLoader(array(
      'Api_Plugin' => 'application/modules/api/plugins', 
     )); 

     $front = Zend_Controller_Front::getInstance(); 
     $front->registerPlugin(new Api_Plugin_ErrorControllerSelectorPlugin()); 
    } 
} 

編集:クラスファイルは、application/modules/api/plugins/ErrorControllerSelectorPlugin.php

に位置しています私は、プラグインを取得するには、これを適応しようとしました

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initAppAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'App', 
      'basePath' => dirname(__FILE__), 
     )); 

     return $autoloader; 
    } 

    protected function _initPlugins() 
    { 
     $loader = new Zend_Loader_PluginLoader(array(
      'My_Plugin' => 'application/plugins', 
     )); 

     $front = Zend_Controller_Front::getInstance(); 
     $front->registerPlugin(new My_Plugin_ModuleConfigLoaderPlugin()); 
    } 
} 

しかし、私はエラーを取得しています:

を使用して、アプリケーション全体に対してロード
Fatal error: Class 'My_Plugin_ModuleConfigLoaderPlugin' not found in /var/www/localhost/application/Bootstrap.php on line 22 

編集:クラスファイルがそうapplication/plugins/ModuleConfigLoaderPlugin.php

に位置しています - 私は彼らが限りZend_Loader_PluginLoader(に送信プレフィックス/パスのペアのように期待されるところのファイルがあるので)との両方のコードケースは同じですが、違いは何ですか?

アプリケーションレベルのプラグインを認識するにはどうすればよいですか?あなたはアプリレベルのプラグインは、名前空間My_内に存在する場合

+0

「My_Plugin_ModuleConfigLoaderPlugin」はどこにありますか? – azat

答えて

2

、あなたはどちらかは、ライブラリフォルダ内でMyフォルダを置くかMy_するアプリレベルの名前空間を宣言する必要があります。

App_名前空間を使用するトップレベルアプリ内に既に他のものがあると仮定すると、最も簡単なのは前者です:Myフォルダをlibraryに移動してください。

library/My/Plugins/ModuleConfigLoaderPlugin.php

ので、プラグインはに存在でしょう。

次に、あなたのconfigs/application.iniMy_名前空間登録していることを確認してください:あなたのプラグインは、SEMはしないので、代わりに

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initAppAutoload() 
    { 
     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'App', 
      'basePath' => dirname(__FILE__), 
     )); 

     return $autoloader; 
    } 

    protected function _initPlugins() 
    { 
     $front = Zend_Controller_Front::getInstance(); 
     $front->registerPlugin(new My_Plugin_ModuleConfigLoaderPlugin()); 
    } 
} 

autoloaderNamespaces[] = "My_"

を次にアプリレベルBootstrapのようなものが含まれている可能性があり任意のパラメータを要求するには、configs/application.ini経由でインスタンス化することができます。