我正在尝试编写控制器插件来检查身份验证。 我创建了一个插件类,放入Application目录,Application.php并在Bootstrap.php中注册。但是有一个错误:致命错误:未找到类“身份验证”。 Zend Framework在哪里寻找插件,如何告诉它它在哪里?
//Application/Authentication.php
class Authentication extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
return;
}
self::setDispatched(false);
// handle unauthorized request...
}
}
//bootstrap
protected function _initAutoloader()
{
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'basePath' => APPLICATION_PATH,
'namespace' => ''));
$autoLoader = Zend_Loader_Autoloader::getInstance();
$autoLoader->registerNamespace('Common_');
return $moduleLoader;
}
protected function _initPlugins()
{
$controller = Zend_Controller_Front::getInstance();
$controller->registerPlugin(new Authentication());
$controller->dispatch();
}
谢谢。
答案 0 :(得分:0)
我知道这个问题真的很老了,但我会留下答案,万一有人像我一样偶然发现这里。这是(从版本1到1.8及以上)如何注册插件:
ZF遵循命名标准:A_B解析为A / B.php。对于插件,ZF会自动查看“库的路径”,这意味着它可以查看库的目录(Zend库所在的目录)。所以插件应该如下:library / Something / Whatever.php ...那是一个场景。然后,您在application.ini中所要做的就是添加以下内容:
autoloaderNamespaces[] = "Something_"
resources.frontController.plugins.Whatever = "Something_Whatever"
翻译成您的案例将是:
autoloaderNamespaces[] = "Common_"
resources.frontController.plugins.Authentication = "Common_Authentication"
你的图书馆结构应该是:
library/Common/Authentication.php
希望这对任何在这里磕磕绊绊的人都有帮助!
- 关于你的帖子/问题
之所以没有“找到”这个类是因为它没有加载自动加载。一个原因可能是您以某种方式违反了命名约定(您的身份验证文件不在目录Common_下,或者Authentication类的文件名不是Common_Authentication ...)。快速解决方法是:
//bootstrap
protected function _initAutoloader()
{
require_once 'Common/Authentication.php';
}
有了这个addes,_initPlugins()就可以毫无问题地执行了。 :)