2009-06-10 77 views
1

我使用的是使用Zend Framework Application工具创建的默认框架代码,我添加了一些自动加载器魔术,以便自动从正确的目录(本例中为Default_Model_TableName)加载名为Default_<*>_<*>的任何类。Zend_DB_Table_Abstract中的关系

应用程序/模型/ ProjectCategories.php:

<?php 

class Default_Model_ProjectCategories extends Zend_Db_Table_Abstract { 
    protected $_name = 'categories'; 
    protected $_dependentTables = array('Projects'); 
} 

应用程序/模型/ Projects.php:

<?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, 
     ) 
    ); 

} 

什么,我试图做的是以下几点:

<?php 
$categories = new Default_Model_ProjectCategories(); 
$category = $categories->find('1'); 
$category->findProjects(); 

在这一点上,我得到一个错误,我无法找到Projects.php,或者该文件可能没有包含名为Projects的类。

此时,我将Projects.php放置在由框架(/../library/)设置的包含路径中,并找到该文件,但现在我失去了整个目录结构,因为我必须将Default_Model_Projects重命名为Projects。我能够得到的一切工作,如果我把文件放回原来的位置,并改变

protected $_dependentTables = array('Projects'); 

protected $_dependentTables = array('Default_Model_Projects'); 

但这也意味着我的->findProjects()现在变成->findDefault_Model_Projects()

有没有办法告诉它,当我在寻找findProjects()它必须实例化Default_Model_Projects?这是Zend Framework中缺少的东西吗,还是我试图以某种不属于它的方式来激励某些东西?你是如何解决这个问题的?

回答

1

这个问题可能是由新的Autoloader引入的,它喜欢加载命名空间类的方式(例如,那些以你为前缀的方式)。

在我的应用程序中,我简单地命名模型(如“项目”),并为该应用程序的包含路径添加单独的模型文件夹。这是一个解决方案 - 不幸的是,我不知道如何让名称空间模型正确加载,但我建议更仔细地查看Zend_Loader,并且可能会使用pluginLoaders。

-1

变化

protected $_dependentTables = array('Projects'); 

protected $_dependentTables = array('Default_Model_Projects'); 
+0

You apparen tly没看完我的整个问题... – 2009-06-14 10:05:36

0

我曾经是能够做到像

 
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath' => APPLICATION_PATH, 
    'namespace' => 'App', 
)); 
$resourceLoader->addResourceType('model', 'models/', ''); 

缩小我的模型类App_TableName但好像它现在不工作...