2012-02-29 97 views
0

我在PHP的應用程序是一個簡化的MVC型結構。此應用程序將用於我公司和其他公司運行的十幾個站點。該結構由一個控制器文件,文件夾稱爲應用程序包含該應用的類,和一個包含位點特異性代碼如模板文件夾名爲位點組成。我們會定期分發補丁,當我們正在分發的變化,更新控制器和應用程序文件夾。其結果是,客戶端不能真正改變應用程序文件夾的核心代碼,而當代碼更新失去這些變化。我可以讓客戶重寫類嗎?

我告訴你,這樣我就可以解釋客戶想要的東西 - 他們希望擴展現有類的能力。有沒有可以允許的設計模式?現在,我已經給用戶更換整個班級的能力:

spl_autoload_register('loadSiteClass'); 
spl_autoload_register('loadCoreClass'); 

這使用了尋找在類的應用程序文件夾之前檢查的一類站點文件夾自動加載磁帶機。我希望能找到一個替代,讓我自動檢測,擴展現有類,而不是強迫類來完全取代負載和使用類。任何建議都會受到歡迎。提前致謝。

如果有幫助,站點文件夾中還有一個站點特定的配置文件,站點管理員可以在其中添加配置設置,告訴我一個類正在擴展,但我仍不確定如何使用該信息如果提供。

回答

1

codeigniter這樣做的方式是在系統類的「client」/「application」文件夾中有一個鏡像目錄結構。然後,您可以在與系統類相同的位置創建一個文件,然後簡單地擴展系統類,並且它們的加載類將先查找替代,然後再替換。

在這裏獲得一些代碼示例:https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php#L277

他們documentation可能更有助於理解他們的模式。

我敢肯定還有更多的方法可以做到這一點......但是通常對於目錄結構和簡單的PHP「擴展」關鍵字的約定對我來說是有意義的。

相關問題