Zend应用程序模型不是自动加载的

时间:2011-05-24 00:53:26

标签: php zend-framework

我开始使用名为Api的模块中的模型,使用以下内容 classname / filename convention:

filename:  {project}/application/modules/api/models/Account.php
classname: Api_Model_Account

他们很乐意按预期自动加载框架。

我认为其中一些模型会更好, 从组织上讲,在应用程序的模型目录中就像它们一样 可以在多个模块中使用。

我移动它们并重命名它们:

filename:  {project}/application/models/Account.php
classname: Application_Model_Account

但是,它们不是自动加载 - PHP会抛出class not found。我检查并确认了我的 配置({project}/application/configs/application.ini):

[production]
appnamespace = "Application"

因此,应用程序命名空间是'Application',但是模型中的 application / models目录没有自动加载。

只是为了让事情变得更加疯狂 - 应用程序/插件中的插件正在自动加载。

测试:

<?php

class Application_Model_ExampleTest extends AMH_Test_PHPUnit_ControllerTestCase
{
    public function testLoad()
    {
        $moduleModel = new Api_Model_Product();
        $plugin = new Application_Plugin_ModuleErrorControllerSelector();
        $applicationModel = new Application_Model_Example();
    }
}

class AMH_Test_PHPUnit_ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    public function setUp()
    {
        $this->bootstrap = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . '/configs/application.ini'
        );

        parent::setUp();
    }

    public function tearDown()
    {
        $this->resetRequest();
        $this->resetResponse();

        parent::tearDown();
    }
}

配置:

[production]
appnamespace = "Application"

bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

includePaths.library = APPLICATION_PATH "/../library"

phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
phpSettings.date.timezone = "Australia/Adelaide"


resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.displayExceptions = 0
resources.modules[] = ""

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

相关文件夹路径:

<project name>/
    application/
        models/
            Example.php
        modules/
            api/
                models/
                    Product.php
        plugins/
            ModuleErrorControllerSelector.php

错误讯息:

PHP Fatal error:  Class 'Application_Model_Example' not found in /var/www/accounts.amh.localhost/tests/application/models/ExampleTest.php on line 9

这是使用Zend Framework 1.10(Ubuntu 10.04的软件包)

4 个答案:

答案 0 :(得分:1)

不知道为什么这种方式不加载。但另一个建议是你可以在包含路径中设置模型。

set_include_path('.'
    . PATH_SEPARATOR . 'application/models'
    . PATH_SEPARATOR . get_include_path()
);

答案 1 :(得分:1)

此方法需要在所有测试中确保环境正确引导:

public function setUp()
{
    $this->bootstrap = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );

    parent::setUp();
}

答案 2 :(得分:0)

在应用级Bootstrap中,您可以配置resource loader

protected function _initAutoloader(){
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'      => APPLICATION_PATH,
        'namespace'     => 'Application',
        'resourceTypes' => array(
            'model' => array(
                'namespace' => 'Model',
                'path'      => 'models',
             ),
        ),
    ));
}

答案 3 :(得分:0)

就我而言,这只是一封大写字母。 Model_DbTable_User - &gt; Model_DBTable_User修复了这个bug。 Model_DbTable_User正在我的本地工作但不在服务器上工作!

相关问题