2011-05-18 52 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"