首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend框架- Zend_Loader_PluginLoader

Zend框架- Zend_Loader_PluginLoader
EN

Stack Overflow用户
提问于 2011-05-18 12:15:46
回答 1查看 1.1K关注 0票数 0

我刚刚开始使用Zend框架,目前我在使用Zend_Loader_PluginLoader时遇到了一些问题。

使用下面的代码,我设法让一个特定于模块的插件很容易地工作:

代码语言:javascript
复制
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

然后,我尝试调整它,以便为整个应用程序加载一个插件,使用:

代码语言:javascript
复制
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());
    }
}

但是我得到了一些错误:

代码语言:javascript
复制
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()的前缀/路径对一样远,并且这两种情况下的代码是相同的,那么有什么区别呢?

如何让它识别我的应用程序级插件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-18 15:28:38

如果希望应用程序级别的插件驻留在命名空间My_中,则需要将My文件夹放在库文件夹中,或者将应用程序级别的命名空间声明为My_

假设您的顶级应用程序中已经有了使用App_名称空间的其他东西,那么最简单的事情就是前者:将My文件夹移到library中。

因此,插件将驻留在:

library/My/Plugins/ModuleConfigLoaderPlugin.php

然后确保您的configs/application.ini注册了My_名称空间:

autoloaderNamespaces[] = "My_"

然后,应用程序级别的Bootstrap可能包含以下内容:

代码语言:javascript
复制
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"

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6039804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档