我正在使用使用Zend Framework Application工具创建的默认框架代码,我添加了一些自动加载器魔法,以便任何名为Default_<*>_<*>
的类都会自动从正确的目录加载,在本例中为{{ 1}}。
应用/模型/ ProjectCategories.php:
Default_Model_TableName
应用/模型/ Projects.php:
<?php
class Default_Model_ProjectCategories extends Zend_Db_Table_Abstract {
protected $_name = 'categories';
protected $_dependentTables = array('Projects');
}
我试图做的是以下内容:
<?php
class Default_Model_Projects extends Zend_Db_Table_Abstract {
protected $_name = 'projects';
protected $_referenceMap = array(
'Category' => array(
'columns' => 'cid',
'refTableClass' => 'ProjectCategories',
'refColumns' => 'id',
'onUpdate' => self::CASCADE,
'onDelete' => self::CASCADE,
)
);
}
此时我收到一个错误,告诉我它无法找到Projects.php,或者该文件可能没有包含名为Projects的类。
此时我将Projects.php放在框架(/../library/)设置的包含路径中并找到该文件,但现在我丢失了整个目录结构,并命名因为我有将<?php
$categories = new Default_Model_ProjectCategories();
$category = $categories->find('1');
$category->findProjects();
重命名为Default_Model_Projects
。如果我将文件放回原来的位置,并且更改
Projects
到
protected $_dependentTables = array('Projects');
但这也意味着我的protected $_dependentTables = array('Default_Model_Projects');
现在变为->findProjects()
。
有没有办法告诉它,当我在寻找->findDefault_Model_Projects()
时,它必须实例化findProjects()
?这是Zend Framework中缺少的东西,还是我试图以不属于它的方式来窃取某些东西?你是怎么解决这个问题的?
答案 0 :(得分:1)
新的Autoloader可能引入了这个问题,以及它更喜欢加载命名空间类的方式(例如那些带有前缀的类)。
在我的应用程序中,我只是将模型命名为“Projects”,并将单独的模型文件夹添加到该应用程序的包含路径中。这是一个解决方案 - 遗憾的是我不知道如何正确加载命名空间模型,但我建议更详细地查看Zend_Loader,以及pluginLoaders。
答案 1 :(得分:0)
我曾经能够做类似
的事情$resourceLoader = new Zend_Loader_Autoloader_Resource(array( 'basePath' => APPLICATION_PATH, 'namespace' => 'App', )); $resourceLoader->addResourceType('model', 'models/', '');
将我的模型类缩小为App_TableName但似乎现在不能正常工作......
答案 2 :(得分:-1)
更改
protected $_dependentTables = array('Projects');
到
protected $_dependentTables = array('Default_Model_Projects');