2011-05-18 63 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(前綴/路徑對定),並在這兩個代碼案件是一樣的,有什麼區別?

如何讓它識別我的應用程序級插件?

+0

而'My_Plugin_ModuleConfigLoaderPlugin'的位置在哪裏? – azat 2011-05-18 04:23:44

回答

2

如果你想應用級插件駐留在命名空間內My_,你要麼需要把My文件夾出庫文件夾或聲明應用級的命名空間是My_

假設您的頂級應用程序中已使用App_命名空間已有其他內容,那麼最簡單的事情就是前者:將My文件夾移出library

因此,該插件將駐留在:

library/My/Plugins/ModuleConfigLoaderPlugin.php

然後確保你的configs/application.ini註冊My_命名空間:

autoloaderNamespaces[] = "My_"

然後應用級Bootstrap可能包含這樣的內容:

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()); 
    } 
} 

或者,因爲你的插件不SEM要求任何參數,你可以通過configs/application.ini實例化它:

resources.frontcontroller.plugins[] = "My_Plugin_ModuleConfigLoaderPlugin"