Zend Framework,模块中没有模型类

时间:2012-12-28 12:04:35

标签: zend-framework

我已经创建了一个包含以下详细信息的应用程序:

1- zf创建项目MyApp

2- zf create module admin

3- zf create controller Index 1 admin

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();

    }

}

application.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.

我该怎么做才能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

一些有用的提示

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

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

protected function _initAutoload()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace(array('Admin_'));
    $autoloader->setFallbackAutoloader(true);
    $autoloader->suppressNotFoundWarnings(false);   
    return $autoloader;
}

希望它有所帮助!

答案 1 :(得分:1)

class Admin_Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

}

应该是

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

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

忽略之前的答案,如果您没有使用任何标准设置,请提供良好的建议,但您的设置显然是标准的。您可能需要在admin_IndexController中大写 admin ,但可能不是。

答案 2 :(得分:0)

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

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

然后我明白了改变

  

Zend_Application_Bootstrap_Bootstrap

  

Zend_Application_Module_Bootstrap

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

  • 有时候 OVER CONFINING ,应用程序.ini会导致Zend-Framework出现很多问题 - 至少对我而言,这种情况很少发生 - 。