我刚刚开始使用Zend框架,目前我在使用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()的前缀/路径对一样远,并且这两种情况下的代码是相同的,那么有什么区别呢?
如何让它识别我的应用程序级插件?
发布于 2011-05-18 15:28:38
如果希望应用程序级别的插件驻留在命名空间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());
}
}或者,由于您的插件不需要任何参数,您可以使用以下命令通过configs/application.ini实例化它:
resources.frontcontroller.plugins[] = "My_Plugin_ModuleConfigLoaderPlugin"
https://stackoverflow.com/questions/6039804
复制相似问题