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”
。但它只适用于没有构造函数参数的插件。否则,您需要通过代码实例化/注册。它将只注册您明确指定的插件,而不是文件夹中的所有插件。给定给资源自动加载程序的命名空间值(在本例中为“应用程序”)是要加载的类名和要查找它们的位置之间映射的一部分。