【问题标题】:zend framework models location and autoloadingzend 框架模型定位和自动加载
【发布时间】:2011-05-25 07:42:42
【问题描述】:

我已经开始记录自己有关 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" 添加到application.ini

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

  • 第二次尝试:

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

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

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

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

附言zend 框架版本是 1.11.1

【问题讨论】:

  • 您需要深入研究自动加载器并对其进行扩展以识别此目录结构和命名空间。否则你会被 zend 方式束缚。
  • 好的,看来这是唯一的方法。谢谢!

标签: php zend-framework models zend-autoloader


【解决方案1】:

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

$loader = $this->getResourceLoader();

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

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

【讨论】:

    【解决方案2】:

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

    Application\
     Models\
      Actors\
       Actor.php
    

    很遗憾,您无法更改这一点。您正在寻找的功能是 namespacing,但它仅受仍在开发中的 Zend Framework 2 支持(实际上是主要功能之一)。

    【讨论】:

    • 感谢您的回复。所以真的没有其他方法可以改变吗?与Application_Model_Actors_Actors 之类的模型一起工作是非常不可用的:-
    • 据我所知,缩短名称的唯一方法是更改​​目录结构。
    • 或者通过扩展/修改zend自动加载器来做你需要的。
    • 您总是可以为您的命名空间设置类似\Doctrine\Common\ClassLoader 的内容并将其推送到 Zend 自动加载器中
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多