2011-08-03 32 views
0

我目前正在研究一些基於ZendFramework的Web應用程序。 在其中一個模塊中,需要計算物料價格。 購買時,通過提供一些促銷代碼,客戶可以獲得一個或多個折扣。ZendFramework - 在模塊目錄結構中放置其他類的位置?

我想使它成爲裝飾(圖案)。

基類計算價格(方法「getPrice」)可以由更多裝飾類之一修改。他們每個人都可以減少一些價值。 所以,每次促銷活動都有其自己的類實現一些接口(例如與方法「用getPrice」)

當然的例子是簡化;)

我的問題是,在什麼地方這串類(和接口)在目錄結構*

*我使用默認ZF的模塊化目錄結構。

他們有一些共同的模型,也許助手?但絕對沒有什麼共同的意見...

另一件事是,他們應該綁定模塊,所以他們應該被放置在該模塊文件夾。

任何幫助,任何想法可以理解的:)

回答

1

您應該構建自己的庫這樣的:

/application 
    /modules 
     // Module structure 
/library 
    /Package 
     /Subpackage 
      /ClassName.php 
    /Zend 
     // Zend Framework Files 

如果你的類名是Package_Subpackage_ClassName。您還應該將自己的Package_前綴添加到自動加載器。

+0

謝謝@adlawson 這是最簡單的解決方案,但我認爲,在主庫dir中,應該只是應用程序範圍的庫,它擴展了ZF或提供了附加功能。 我要求的一個是模塊特定的... – drep

2

聽起來就像你想要這些進入application/modules/somemodule/models所以像Somemodule_Model_SomePromotion這樣的類將駐留在application/modules/somemodule/models/SomePromotion.php

我相信模塊化設置的默認資源自動加載器將被配置爲從該models文件夾加載帶有帽子格式的類名的模型。通過@

protected function _initResourceLoader() 
{ 
    $resourceLoader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Somemodule_', 
     'basePath' => dirname(__FILE__), 
     'resourceTypes' => array(
      'models' => array(
       'namespace' => 'Model_', 
       'path'  => 'models', 
      ), 
     ), 
    )); 
} 

更新

根據註釋brady.vitrano::但如果不是,然後添加以下到模塊(而不是應用程序)引導如果模塊引導延伸Zend_Application_Module_Bootstrap,那麼資源包含這個映射的自動加載器是免費的。除非您想添加其他資源類型,否則無需手動包含它。

+0

Friendly Note:在模塊中擴展'Zend_Application_Module_Bootstrap' Bootstrap.php文件不需要使用'Zend_Application_Module_Autoloader'它可以在構造和加載所有的標準資源類型自動。如果你在你的application.ini文件中添加'appNamespace =''',那麼在你的應用程序Bootstrap文件中不需要使用'Zend_Application_Module_Autoloader'。基本上,你不需要手動調用'Zend_Application_Module_Autoloader'。 –

+0

@brady。維特拉諾:謝謝你的擡頭。我這麼想,但不確定。我將編輯答案以包含您的信息。 –

+0

謝謝,但問題不是技術,所以不需要甚至一行代碼;) 這是唯一的設計問題... 我不認爲那種功能應該表示爲模型。它是另一層,或者可能是模型幫手? 將它們(類)與通用模塊模型放在一起是個不錯的主意imho ... 我想在我的模塊模型目錄中創建另一個子文件夾。 再次: 你在哪裏,在你的應用程序中,放置這種類型的功能類,不是ctrl/model/view和definitly不應該放在主「library」文件夾中,因爲它們是模塊特定的。 – drep

相關問題