如何加载Zend Framework插件?

时间:2011-06-30 01:34:40

标签: zend-framework

我在应用程序目录中创建了一个plugins目录。

目前我正在加载这样的插件:

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

我需要做什么才能使用include功能?非常感谢提前。

2 个答案:

答案 0 :(得分:3)

Zend_Loader_Autoloader_Resource允许您定义文件路径和类名之间的映射。这允许您自动加载其文件未存储在包含路径中的类。

通常,您将使用子类Zend_Application_Module_Autoloader,它为模型,表单等设置一些公共映射。特别是,它有一个插件条目。在Bootstrap中,它将是这样的:

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

然后名为Application_Plugin_MyPlugin的类将驻留在文件application/plugins/MyPlugin.php中。

在您的特定情况下,您似乎使用的是空名称空间。所以你的意思是:

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

    return $resourceLoader;
}

然后您的插件类Plugin_AccessCheck将驻留在文件application/plugins/AccessCheck.php中。

确保在实例化/注册插件之前创建了资源加载器:

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

答案 1 :(得分:3)

我使用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但您可以使用此处指定的其他函数:http://framework.zend.com/manual/en/zend.controller.plugins.html