我已经开始记录自己有关 Zend Framework 的情况,因为我很快就会开始在生产中使用它。一切都工作正常,直到我开始使用和处理模型:)。

根据 Zend 建议,模型的默认位置是 application/models/DbTable, ,所有模型都将被放入其中。这个位置迫使我命名一个模型,例如 Application_Model_DbTable_Actors. 。对我来说,这是一个很长的模型名称,而且不容易使用。

我想要获取的目录结构如下所示:

application/
  models/
    actors/
      ActorsMapper.php
      Actor.php
    books/
      BooksMapper.php
      Book.php

ETC。

所以我的所有模型都将驻留在 models 目录,但分组在自己的目录中。

每个类的命名应该是 ActorsMapper 或者 Actor (他们都会延长 Zend_Db_Table 或者 Zend_Db_Row).

我知道这样一个事实,在我的控制器中,如果我使用类似的东西实例化一个模型 $actors = new ActorsMapper() 我会得到一个 Fatal error: Class not found 这就是为什么我需要你的帮助。

为了解决这个问题我尝试添加我的 models 目录到 include_path:

  • 第一次尝试

    添加 includePaths.models = APPLICATION_PATH "/models" 到应用程序.ini

但这甚至没有将其添加到包含路径中

  • 第二次尝试:

    使用显式添加路径 set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));

但即使这在包含的路径中添加了该路径,错误仍然存​​在。

我在中看到过这种模型命名 官方文档Zend_Db_Table, ,但我找不到与自动加载它们相关的任何内容。

谢谢大家提供任何解决方案。

附注zend框架版本是1.11.1

有帮助吗?

解决方案

Zend Framework 有一个内置的自动加载器。它的工作原理是将类名映射到目录树,所以 Application_Model_Actors_Actor 将被映射到

Application\
 Models\
  Actors\
   Actor.php

不幸的是,你无法改变这一点。您正在寻找的功能是 命名空间 但它仅受仍在开发的 Zend Framework 2 支持(实际上是主要功能之一)。

其他提示

尝试扩展 Zend_Application_Bootstrap_Bootstrap 那么你可以尝试这个

$loader = $this->getResourceLoader();

$loader->addResourceType('书籍', '模型/书籍', 'Model_Book');$loader->addResourceType('演员','模型/演员','Model_Actor');

我也在尝试以观察者模式来实现这种实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top