0

我创建了一个包含这些详细信息的应用程序:

1- zf 创建项目 MyApp

2- zf 创建模块管理员

3- zf 创建控制器索引 1 管理员

MyApp/application/modules/admin/controllers/IndexController.php:

class admin_IndexController extends Zend_Controller_Action
{

    public function init()
    {
        error_reporting(E_ALL);
        ini_set('display_errors', 'On');
    }

    public function indexAction()
    {

        $aa = new Admin_Model_DbTable_Posts();

    }

}

应用程序.ini:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap" 
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

MyApp/application/modules/admin/models/DbTable/Posts.php:

class Admin_Model_DbTable_Posts extends Zend_Db_Table_Abstract    
{
    public function init()
    {

    }
}

在这一点上,我得到了错误:

Fatal error: Class 'Admin_Model_DbTable_Posts' not found in /var/www/MyApp/application/modules/admin/controllers/IndexController.php on line 16

当我把这条线放在 application.ini

resources.modules[] =

并将这些内容添加到 admin 文件夹中的 bootstratp.php

class Admin_Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

}

经过长时间的请求,我收到此错误:

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.

我应该怎么做才能让它工作?

4

3 回答 3

1

一些有用的提示给你

  • 使用以下命令显式加载 application.ini 中的模块:
    resources.modules[] = "管理员"
    resources.modules[] = "默认"
  • 确保在 application.ini 文件中对字符串文字使用双引号"而不是单引号。'

  • 如果Admin_Model_DbTable_Posts未找到,则 zend_autoloader 或包含路径不完整。您可以使用 Bootstrap.ini 中的以下代码将 zend 自动加载器设置为使用回退选项

受保护的函数 _initAutoload()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace(array('Admin_'));
    $autoloader->setFallbackAutoloader(true);
    $autoloader->suppressNotFoundWarnings(false);   
    返回$自动加载器;
}

希望能帮助到你!

于 2012-12-28T12:24:28.570 回答
1
class Admin_Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

}

应该

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

使用Module_Bootstrap应该可以为您的应用程序提供模块资产。我不会做任何其他改变。

忽略前面的答案,如果您使用非标准设置,这是个好建议,但您的设置显然是标准的。您可能必须在 admin_IndexController 中将admin大写,但可能不需要。

于 2012-12-28T13:53:19.300 回答
0

我通过将 shawndreck 和 RokyFord 的答案放在一起解决了这个问题。感谢这两个主题。我实际上过度配置了 application.ini 文件。我做了以下事情:

我重新创建了另一个简单的项目,它工作正常,所以我比较了两个项目文件。

然后我明白了,随着改变

Zend_Application_Bootstrap_Bootstrap

Zend_Application_Module_Bootstrap

并将 resources.modules[] = "admin" 放在 application.ini 中,它可以工作。

  • 有时过度限制application.ini 会导致 Zend-Framework 出现很多问题——至少对我来说,这种情况经常发生——。
于 2012-12-28T20:03:41.087 回答