我在应用程序目录中创建了一个plugins目录。
目前我正在加载这样的插件:
protected function _initAccessCheck()
{
include('../application/plugins/AccessCheck.php');
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin( new Plugin_AccessCheck() );
}
我需要做什么才能使用include功能?非常感谢提前。
答案 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