zend框架模型位置和自动加载
-
09-10-2019 - |
题
我已经开始记录自己有关 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');
我也在尝试以观察者模式来实现这种实现。