【问题标题】:How to get modules to work in the Zend Framework如何让模块在 Zend 框架中工作
【发布时间】:2013-02-10 18:56:34
【问题描述】:

尝试在 Zend Framework 应用程序中使用模块化布局时出现以下错误:

未定义索引:C:\PHP\includes\Zend\Controller\Dispatcher\Standard.php 中的身份验证在第 385 行

以下代码在此错误之前运行:

if (!$this->_acl->isAllowed($role, $resource, $privilege)) {
    $request->setModuleName('authentication');
    $request->setControllerName('auth');
    $request->setActionName('login');
    $request->setDispatched(false);
}

在我的引导程序中,我有:

$frontController
    ->setParam('environment', $this->environment)
    ->setControllerDirectory(ROOT_DIR . '/controllers')
    ->addModuleDirectory(ROOT_DIR . '/modules');

我的目录结构是:

/ application
    / controllers
    / models
    / views
    / library
    / modules
        / Authentication
            / controllers
                AuthController.php

任何想法为什么这不起作用?

【问题讨论】:

    标签: php zend-framework access-control


    【解决方案1】:

    区分大小写?我在文档中没有发现任何特别提到区分大小写的内容,但所有带有模块的示例也显示模块目录名称都是小写的。

    我自己的,最近的 ZF 应用程序使用模块并且目录名称都是小写的。

    另外,您的路由定义中是否设置了默认模块?

    【讨论】:

    • 感谢彼得,这肯定摆脱了该错误消息。不幸的是,另一个出现在它的位置:PHP Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("Authentication_AuthController")' in C:\PHP\includes\Zend\Controller\Dispatcher\Standard.php:353 我没有'没有定义一个默认模块——我想我可以把我的应用程序特定的文件直接保存在应用程序目录下——不是这样吗? (我看到我上面的目录结构是错误的 - 我现在已经将所有文件夹都设为应用程序的子文件夹)。
    • 好的 - 错误消息是因为我需要使用 Module_Controller 约定命名我的控制器类,而不仅仅是控制器,对吧?所以 Authentication_AuthController 而不仅仅是 AuthController。
    • 这是正确的 - 控制器名称需要在模块名称前添加。
    【解决方案2】:

    出于好奇,为什么要设置整个模块来进行身份验证(而不是让默认模块内的操作来处理这个问题)?

    【讨论】:

    • 嗨,我将身份验证作为一个模块,因为我觉得它是应用程序通用功能 - 如果它是一个模块,然后我可以将该模块放入任何应用程序中。 “身份验证”可能会产生误导,因为我希望包括登录、注销、密码检索和配置文件管理。你会怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2012-04-09
    相关资源
    最近更新 更多