3

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

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

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

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

等等

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

每个类的命名应该是ActorsMapperor Actor(它们都将扩展Zend_Db_Tableor Zend_Db_Row)。

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

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

  • 第一次尝试

    添加includePaths.models = APPLICATION_PATH "/models"到 application.ini

但是这个甚至没有将它添加到包含路径中

  • 第二次尝试:

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

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

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

谢谢大家的任何解决方案。

ps zend 框架版本是 1.11.1

4

2 回答 2

0

Zend Framework 有一个内置的自动加载器。它通过将类名映射到目录树来工作,因此Application_Model_Actors_Actor将被映射到

Application\
 Models\
  Actors\
   Actor.php

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

于 2010-12-14T14:45:43.927 回答
0

尝试扩展 Zend_Application_Bootstrap_Bootstrap 然后你可以试试这个

$loader = $this->getResourceLoader();

$loader->addResourceType('books', 'models/books', 'Model_Book'); $loader->addResourceType('actors','models/actors','Model_Actor');

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

于 2011-03-19T03:22:26.567 回答