在Zend中包含模块插件

时间:2012-12-08 10:57:10

标签: php zend-framework plugins

我写了一个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。请帮助我,我已经浪费了一个多小时,这令人沮丧。

1 个答案:

答案 0 :(得分: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"