2009-01-13 40 views
1

我有一個用PHP編寫的原型網站。最近我重寫了代碼,將邏輯從佈局和數據庫操作中分離出來。所以現在我有一些像MVC代碼設計。PHP'widget like'code design

現在困擾我的是,在MVC中,我將有許多文件,並且每個文件都會在與其他模型(模型+視圖+控制器)組合時顯示某些內容。所以我發現創建類似於我的MVC部件的小部件是非常有用的。

例如,當我有產品視圖的MVC比創建一個PHP文件,以這種方式結合MVC部分文件以顯示基於GET值的產品時,我傳遞給這個新的PHP文件。

我會這樣做的是,任何小部件,網站的子部分將可單獨查看和使用與其他部分分開。所以它會像小部件或Firefox瀏覽器設計一樣。

所以我可以單獨測試網站的每個部分,而不是僅將這些部分組合成當前的實際網站頁面設計。因此,用戶測試也將變得更加容易,演示文件將會非常簡短並且易於理解。

我想知道您對此有何看法。我不想陷入設計中的任何漏洞之中,我認爲這是將來保持網站代碼容易維護的重要時刻。

我正確嗎?

+0

一個不錯的檢查,看看你是否正確使用MVC,是調用標題(「位置:www.google.com」);在你的模型或控制器的某個地方,如果你得到了關於已經發送的頭文件的錯誤,那麼你在那裏有一個輸出。 – 2009-01-13 11:27:19

回答

1

MVC我有很多文件,當與其他(模型+觀點+控制器)結合每次都會顯示一些

這聽起來像是你沒有得到的MVC模型權。只有視圖有內容或「顯示內容」。

基於此,您可以創建僅創建內容的小部件類部分的操作,然後可以在佈局中進行組合。我想推薦閱讀Zend_Layout Quick Start

1

您的問題的答案是視圖組成

我建議你把整個屏幕分成小塊:頂欄,二欄導航欄,產品列表,預覽區等等。這些可以通過單獨的視圖,視圖助手或控制器中的其他方法提供。然後,一個控制器動作將組成件使用簡單的HTML佈局到單個屏幕。

例如,對於靜態頂部欄,這可能是專門的視圖。對於動態的產品列表,它可以是控制器方法getProductsList($categoryId),它提供了複雜的視圖。產品預覽可以由視圖助手提供。請看下面的例子:

// inside class ProductsController 
public function index($categoryId, $productId = null) { 

    // specialised view 
    $topBar = new TopBarView(); 
    $topBar->selected = 'products'; 

    // helper method 
    $list = $this->getProductsList($categoryId); 

    // helper object 
    $previewHelper = new PreviewHelper($productId); 
    $preview = $previewHelper->getView(); 

    // view composition 
    $view = new View('path/to/template.tpl'); 
    $view->add($topBar); 
    $view->add($list); 
    $view->add($preview); 
    return $view; 

} 

這只是一個例子來說明組成如何工作。

具有交付小工具(即產品列表)的方法的隱藏好處是它可以被重用來支持Ajax。更改類別需要使用新類別標識的方法調用getProductsList方法。