2011-03-19 95 views
0

的目錄結構爲:如何設置未映射資源

application 
    models 
     Milestones 
      ObserverBroker.php => Application_Model_Milestone_ObserverBroker 
     Observers 
      Milestone.php   => Application_Model_Observer_Milestone 

在bootstrap.php中

$loader->addResourceType('observer','models/observers','Model_Observer'); 
$loader->addResourceType('observerbroker','models/milestones','Model_Milestone'); 

我遇到的問題是:

[[email protected]]$ php zfrun.php \ 
>   --environment development -a task.create-milestone -m '%s' \ 
>   -p '%s' 
PHP Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 55 

Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 55 


[[email protected]]$ php zfrun.php \ 
>   --environment development -a task.update-milestone -m '%s' -o '%s' \ 
>   -p '%s' 
PHP Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 81 

回答

0

你不應該」必須爲Application_Model_命名空間中的類添加資源類型。

默認模塊自動加載磁帶機已經包含了規則這個,只要你的配置appnamespace的「應用程序」

作爲一個測試,我剛剛創建兩個型號,Application_Model_Test(應用程序/模型/ test.php的)和Application_Model_Test_Test(應用/models/Test/Test.php)並且不需要添加任何東西,就能夠在我的控制器中創建每個實例。

編輯

在重新閱讀你的問題,它看起來像你想的Application_Model_Milestone_類存放在「里程碑* S *」(複數),同樣也觀察類。雖然我認爲只要將這些內容存儲在application/models/Milestoneapplication/models/Observer之下並讓默認的自動加載器完成它,那看起來您的問題是由於區分大小寫而導致的。

您的$loader->addResourceType()調用使用小寫文件夾名稱,而您的目錄結構示例使用MilestonesObservers(首字母大寫)。

這將在區分大小寫的文件系統上失敗。

+0

我已將目錄里程碑更改爲里程碑和觀察者觀察者。謝謝你的答案。我使用這個在trac插件上實現觀察者模式。 – Efox 2011-03-23 23:37:23