我已经开始记录自己关于Zend Framework的内容,因为我很快就会开始在生产中使用它。一切都很好,直到我开始使用并使用模型:)。
基于Zend建议的模型的默认位置是application/models/DbTable
,其中将抛出所有模型。此位置迫使我命名像Application_Model_DbTable_Actors
这样的模型。对我来说,这是一个非常长的名称,而不是一个易于使用的模型。
我想要获取的目录结构如下所示:
application/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
等
因此,我的所有模型都将驻留在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"
添加到application.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
答案 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');
我也试图以观察者模式实现这种实现。