【发布时间】:2011-05-24 00:53:26
【问题描述】:
我开始使用名为 Api 的模块中的模型,使用以下 类名/文件名约定:
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/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 软件包)
【问题讨论】:
-
那么自动加载器只有在单元测试时才工作?
-
那是一个相当老的 ZF 版本。您可能需要检查他们何时引入
appnamespace配置参数 -
刚刚检查过,是 1.9.2,所以你应该没问题 - framework.zend.com/issues/browse/ZF-7158
-
@Phil - 是的,这是与 Ubuntu 的 LTS 版本挂钩的一个问题。
-
@Horus 离题但看看 Zend Server CE - files.zend.com/help/Zend-Server-Community-Edition/…
标签: php zend-framework