zend框架模型定位和自动加载

时间:2010-12-14 14:28:55

标签: php zend-framework models zend-autoloader

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

基于Zend建议的模型的默认位置是application/models/DbTable,其中将抛出所有模型。此位置迫使我命名像Application_Model_DbTable_Actors这样的模型。对我来说,这是一个非常长的名称,而不是一个易于使用的模型。

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

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

因此,我的所有模型都将驻留在models目录下,但会分组在各自的目录中。

每个班级的命名应该是ActorsMapperActor(它们都会延伸Zend_Db_TableZend_Db_Row

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

要解决此问题,我尝试将models目录添加到include_path:

  • 首先尝试

    includePaths.models = APPLICATION_PATH "/models"添加到a​​pplication.ini

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

  • 第二次尝试:

    使用set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));

  • 明确添加了路径

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

我在Zend_Db_Table的{​​{3}}中看到了这种模型的命名,但我找不到与自动加载相关的任何内容。

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

P.S。 zend框架版本是1.11.1

2 个答案:

答案 0 :(得分:0)

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

Application\
 Models\
  Actors\
   Actor.php

不幸的是,你无法改变这一点。您正在寻找的功能是namespacing,但它仅支持Zend Framework 2(并且实际上是主要功能之一),目前仍在开发中。

答案 1 :(得分:0)

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

$ loader = $ this-> getResourceLoader();

$ loader-> addResourceType('books','models / books','Model_Book'); $装载机> addResourceType( '角色', '型号/演员', 'Model_Actor');

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