【问题标题】:Model class is not found in zend framework project (quickstart)在 zend 框架项目中找不到模型类(快速入门)
【发布时间】:2010-03-19 08:35:02
【问题描述】:

我做的是

  1. zf 在命令提示符下创建项目 demo1
  2. 将这些行添加到 application.ini
    • appnamespace = "应用程序"
    • resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
  3. 使用 partial() 添加带有页眉和页脚的布局(效果很好)
  4. 在models目录中创建Data.php并添加这个简单的类

    <?php class Application_Model_Data{   }//Application for appnamespace 
    
  5. 然后我尝试从索引控制器索引操作加载这个类(通过创建实例)

    $data = new Application_Model_Data();

  6. 但是当我在这个级别测试它时,它给出了一个错误

    致命错误:在 C:\Zend\...\IndexController.php 中找不到类“Application_Model_Data”

问题

  1. 我想添加一个自动加载器到 在应用程序中加载模型(我没有使用模块)
  2. 如果不是我想添加的内容

请帮助我一开始就卡住了,谢谢

【问题讨论】:

  • 你有什么版本的ZF?我做了快速入门,效果很好
  • 是的,它必须工作。Zend Server CE (PHP 5.3)Zend Framework Version 1.9.5。我认为这是我的代码或系统的问题..谢谢

标签: zend-framework


【解决方案1】:

这应该可行!

将此函数添加到引导程序:

protected function _initResourceAutoloader()
{
     $autoloader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => APPLICATION_PATH,
        'namespace' => 'Application',
     ));

     $autoloader->addResourceType( 'model', 'models', 'Model');
     return $autoloader;
}

【讨论】:

    【解决方案2】:

    您需要在 Bootstrap 中设置资源自动加载器,如下所示:

    protected function _initResourceAutoloader()
    {
         $autoloader = new Zend_Loader_Autoloader_Resource(array(
            'basePath'  => 'path/to/application/directory',
            'namespace' => 'Application_',
         ));
    
         return $autoloader;
    }
    

    这样,Zend 可以在您的应用程序中加载模块,而不仅仅是模型,而是 DbTable、Forms、插件等。

    【讨论】:

    • 非常感谢。我试过了,但没有任何改变。我认为我的应用程序有问题。再次感谢
    【解决方案3】:

    在您的引导文件中写入以下内容:

    protected function _initDefaultModuleAutoloader()
    { 
    
        $resourceLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath'  => APPLICATION_PATH,
        ));
    
        return $resourceLoader;
    
    }
    

    在您的模型文件夹中创建新文件并将其命名为“Data.php”

    在 Data.php 中这样声明类:

    class Model_Data extends Zend_Db_Table_Abstract {.....}
    

    您现在可以像这样实例化您的数据模型:

    $data = new Model_Data();
    

    祝你好运:-)

    【讨论】:

      【解决方案4】:

      在您的应用程序 ini 中,您应该有 autoloadernamespaces.0 = 'Application' 而不是 appnamespace

      那么你的模型将在

      /library/Application/Model/Data.php

      但你为什么不在建议的应用程序结构中使用默认的“模型”文件夹。

      【讨论】:

      • no no data.php 文件放置在默认模型文件夹 demo1\application\models\Data.php
      • /library/Application/Model/Data.php ?不不,这不是一个库类。它是一个简单的模型类。谢谢
      • 请帮助我,我知道如何将数据库和表类添加到应用程序。我的 IDE 在正确的位置显示该类,但我无法从控制器访问模型类。为什么?请。谢谢
      • 如果模型在models文件夹中,类名只有Model_Data
      • 我试过了,但是 "Class 'Model_Data' not found in ....IndexController.php on line xx. 顺便说一句,非常感谢。
      【解决方案5】:

      我忘记在文件中添加文件扩展名 .php,以防其他人犯同样的错误

      【讨论】: