0

我编写了一个 Auth 插件来检查用户是否已登录。没有登录的用户应该能够访问应用程序中除了登录页面之外的任何内容。

所以我在文件中有这个application/modules/user/plugins/Auth.php

class User_Plugin_Auth extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        if (Zend_Auth::getInstance()->hasIdentity() 
               || $this->getRequest()->getActionName() == 'login') return;
        $request->setModuleName('user');
        $request->setControllerName('auth');
        $request->setActionName('login');
    }
}

然后我在application.ini

pluginPaths.User_Plugin = APPLICATION_PATH "/modules/user/plugins/"
resources.frontController.plugins[] = "User_Plugin_Auth"

但是,无论我如何移动Auth.php文件,无论名称如何,我总是得到Fatal error: Class 'User_Plugin_Auth' not found. 请帮助我,我已经浪费了一个多小时,这令人沮丧。

4

1 回答 1

1

我认为问题与文件名有关。我会尝试在这些位置创建文件的副本

application/modules/user/plugins/User_Plugin_Auth.php

application/modules/user/plugins/User/Plugin/Auth.php

当然,您只需要其中一个,因此一旦找到有效的,请删除其他。

如果这对我的配置中的语法没有帮助(Fam 只是项目的代号)

resources.frontController.plugins.layout = "Fam\Controller\Plugin\Layout"
resources.frontController.plugins.route = "Fam\Controller\Plugin\Route"

正如评论中指出的 php 5.3 - 这应该在旧版本中工作,假设包含路径已配置

resources.frontController.plugins.layout = "Fam_Controller_Plugin_Layout"
resources.frontController.plugins.route = "Fam_Controller_Plugin_Route"

映射到我的库中的文件,例如

APPLICATION_PATH "/../library/Fam/Controller/Plugin/Layout.php"

作为该项目的参考,我的 Zend 文件位于

APPLICATION_PATH "/../library/Zend"

所以将文件调整到相对位置应该可以解决问题

你的自动加载器配置了吗?我有 autoloaderNamespaces.0 = "Fam"

你可能需要类似的东西

autoloaderNamespaces[] = "User_"
resources.frontController.plugins.UserAuth = "User_Plugin_Auth"
于 2012-12-08T12:29:08.490 回答