Zend framework 如何加载Zend Framework插件?

Zend framework 如何加载Zend Framework插件?,zend-framework,Zend Framework,我在应用程序目录中创建了一个插件目录 目前我正在加载插件,如下所示: protected function _initAccessCheck() { include('../application/plugins/AccessCheck.php'); $fc = Zend_Controller_Front::getInstance(); $fc->registerPlugin( new Plugin_AccessCheck() ); } 我需要做什么才能不使用i

我在应用程序目录中创建了一个插件目录

目前我正在加载插件,如下所示:

protected function _initAccessCheck()
{ 
    include('../application/plugins/AccessCheck.php');
    $fc = Zend_Controller_Front::getInstance();
    $fc->registerPlugin( new Plugin_AccessCheck() );
}

我需要做什么才能不使用include函数?非常感谢。

Zend\u Loader\u Autoloader\u资源允许您定义文件路径和类名之间的映射。这允许您自动加载其文件未存储在include路径上的类

通常,您会使用子类
Zend\u Application\u Module\u Autoloader
,它为模型、表单等设置一些常见的映射。特别是,它有一个插件条目。在Bootstrap中,应该是这样的:

protected function _initResourceLoader()
{
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Application',
        'basePath' => APPLICATION_PATH,
    ));
    return $resourceLoader;
}
然后名为
Application\u Plugin\u MyPlugin
的类将驻留在文件
Application/plugins/MyPlugin.php

在您的特定环境中,看起来您使用的是空名称空间。所以你的答案是:

protected function _initResourceLoader()
{
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath' => APPLICATION_PATH,
    ));

    return $resourceLoader;
}
然后您的插件类
plugin\u AccessCheck
将驻留在文件
application/plugins/AccessCheck.php

在实例化/注册插件之前,请确保已创建资源加载程序:

protected function _initAccessCheck()
{ 
    $this->booststrap('resourceLoader');
    $fc = Zend_Controller_Front::getInstance();
    $fc->registerPlugin( new Plugin_AccessCheck() );
}

Zend_Loader_Autoloader_资源
允许您定义文件路径和类名之间的映射。这允许您自动加载其文件未存储在include路径上的类

通常,您会使用子类
Zend\u Application\u Module\u Autoloader
,它为模型、表单等设置一些常见的映射。特别是,它有一个插件条目。在Bootstrap中,应该是这样的:

protected function _initResourceLoader()
{
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Application',
        'basePath' => APPLICATION_PATH,
    ));
    return $resourceLoader;
}
然后名为
Application\u Plugin\u MyPlugin
的类将驻留在文件
Application/plugins/MyPlugin.php

在您的特定环境中,看起来您使用的是空名称空间。所以你的答案是:

protected function _initResourceLoader()
{
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath' => APPLICATION_PATH,
    ));

    return $resourceLoader;
}
然后您的插件类
plugin\u AccessCheck
将驻留在文件
application/plugins/AccessCheck.php

在实例化/注册插件之前,请确保已创建资源加载程序:

protected function _initAccessCheck()
{ 
    $this->booststrap('resourceLoader');
    $fc = Zend_Controller_Front::getInstance();
    $fc->registerPlugin( new Plugin_AccessCheck() );
}

我使用application.ini文件以以下方式启用插件:

例如,对于身份验证控制插件,我有以下内容:

class Application_Plugin_AuthCheck extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        //check if user is logged in
    }    
}
然后我将其添加到application.ini

resources.frontController.plugins.authcheck = Application_Plugin_AuthCheck
现在已经在申请时注册了


注意:我使用dispatchLoopStartup,但您可以使用此处指定的另一个函数:

我使用application.ini文件以以下方式启用插件:

例如,对于身份验证控制插件,我有以下内容:

class Application_Plugin_AuthCheck extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        //check if user is logged in
    }    
}
然后我将其添加到application.ini

resources.frontController.plugins.authcheck = Application_Plugin_AuthCheck
现在已经在申请时注册了


注意:我使用dispatchLoopStartup,但您可以使用此处指定的另一个函数:

谢谢@David Weinraub的回复。成功了。这可以通过application.ini完成吗?Zend_Application_Module_Autoloader是否加载指定目录中的所有PHP文件,还是只是将该目录添加到include路径?如果我使用的是名称空间呢?这会有什么不同?您可以使用
application.ini
注册插件,例如:
resources.frontController.plugins.accesscheck=“application\u Controller\u plugin\u accesscheck”
。但它只适用于没有构造函数参数的插件。否则,您需要通过代码实例化/注册。它将只注册您明确指定的插件,而不是文件夹中的所有插件。在本例中,给定给资源自动加载程序的命名空间值-
“应用程序”
,是要加载的类名和要查找它们的位置之间映射的一部分。感谢@David Weinraub的回复。成功了。这可以通过application.ini完成吗?Zend_Application_Module_Autoloader是否加载指定目录中的所有PHP文件,还是只是将该目录添加到include路径?如果我使用的是名称空间呢?这会有什么不同?您可以使用
application.ini
注册插件,例如:
resources.frontController.plugins.accesscheck=“application\u Controller\u plugin\u accesscheck”
。但它只适用于没有构造函数参数的插件。否则,您需要通过代码实例化/注册。它将只注册您明确指定的插件,而不是文件夹中的所有插件。给定给资源自动加载程序的命名空间值(在本例中为“应用程序”)是要加载的类名和要查找它们的位置之间映射的一部分。