加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:11:56 所属栏目:PHP教程 来源:网络整理
导读:我开始使用名为Api的模块中的模型,使用以下内容 classname / filename约定: filename: {project}/application/modules/api/models/Account.phpclassname: Api_Model_Account 正如预期的那样,他们很乐意通过框架自动加载. 我决定其中一些模型会更好, 从组织
我开始使用名为Api的模块中的模型,使用以下内容
classname / filename约定:

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

正如预期的那样,他们很乐意通过框架自动加载.

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

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

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

但是,它们不是自动加载 – PHP会抛出一个未找到的类.我检查并确认了我的
配置({project} /application/configs/application.ini):

[production]
appnamespace = "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的包)

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读