2009-06-10 30 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但好像它現在不工作...