2011-07-12 17 views
3

我有很多用PHP編寫的遺留代碼,它不是寫在任何特定的框架上,而是大部分是老派風格(即內聯)的PHP。但是,我的大部分新代碼都是在Kohana 3.1.X框架中編寫的。雖然Kohana確實允許遺留代碼和Kohana文件在同一個Web站點上共存,但我想現在將每個遺留代碼文件作爲視圖進行合併,並充分利用Kohana的MVC設計模式和URL重寫功能。然而,我的遺留代碼無法訪問在視圖本身內定義的全局變量(即遺留代碼),並且無法利用嘗試通過全局範圍語句查看這些全局變量的內聯函數時遇到問題。例如:如何在Kohana中包裝PHP遺留代碼?

應用/視圖/ legacy.php

$gvar = 5; 

function getadminsettings(){ 
    global $gvar; 
    echo $gvar; 
} 

應用/類/控制器/ myctrl.php

... 
public function action_legacy() { 
    // call legacy.php as a view via View::factory() 
} 
... 

由於我有這麼多遺留代碼,是不切實際的重構所有這些遺留代碼文件都是真實的視圖。我該如何將這些文件視爲視圖或將它們作爲視圖來訪問,以便我可以從現在起將控制器中的邏輯寫入而不是內聯(從而遵循真正的MVC設計模式),然後將變量到這些遺留文件?

我看過In PHP, how can I wrap procedural code in a class?但這篇文章在這種情況下並不真正起作用,因爲我正在處理Kohana框架。

更新:

的Kohana似乎使用的輸出緩衝器,這就是爲什麼它是無法在傳統的文件來訪問這些全局變量。有沒有人成功獲取Kohana 3.2中的視圖來訪問全局變量?

回答

0

將遺留應用程序移動到MVC風格框架並不適用於剪切和粘貼方法。在任何最簡單的應用程序中,都需要花費大量的時間和精力來重構代碼,使其與MVC兼容。

如果您的遺留應用程序正常工作並且沒有定期開發,那麼切換到MVC將獲得很少的收益。 MVC模式通常會引入開銷,主要是開發人員而不是最終用戶的好處。但是,如果您的應用程序需要定期維護,您將不得不花費必要的努力來重構遺留代碼以適應新的方法。

+0

是的,我想到的是,舊代碼將繼續定期進行維護,但我想限制數量變爲遺留代碼庫。 – Matthew

+0

@Matthew:在這種情況下,我認爲需要一個完整的重構。試圖包裝現有的代碼最多隻會變得脆弱,在最糟糕的情況下難以維護,令人難以置信。 –

+0

我一直在探索使用cURL調用通過創建一個特殊的類而不是使用View :: factory()方法來訪問這些腳本的想法,但我不想在服務器上添加更多的負載。你認爲這可能有用嗎? – Matthew

0

我從來沒有嘗試過這一點,但你可以嘗試把代碼放入控制器,而不是視圖。

這裏假設你使用的是Controller_Template爲控制器

public function action_legacy() { 
    $this->auto_render = FALSE; 

    include('legacy file'); 
    // you could cut and paste the legacy code here, but it might get to messy 
}