2011-09-05 97 views
11

我對模型 - 視圖 - 控制器模式有一些(可能是基本的)知識,我想用這個創建一個站點。但是我發現如何真正實現這一點有點令人困惑。我陷入了細節。如何在沒有使用框架的PHP中使用MVC

說我有一個網站,每個用戶保留一些待辦事項列表。你會如何處理這個問題? 你會創建什麼類?哪個類將輸出HTML,哪個類將作爲控制器服務器,以及如何與視圖進行通信以生成輸出?等

對不起,如果它看起來很愚蠢,我想它一定有點容易,但我卡住了。

+2

http://tutorialzine.com/2011/08/jquery-mobile-product-website/不是待辦事項列表網站,而是一個使用MVC模式的網站。 – Kheldar

+1

按照通常的方式進行書寫,然後將其轉移到MVC。做幾次這樣的事情,你很快就可以從一個項目的開始就開始使用MVC模式。 – chelmertz

回答

5

在沒有現有框架的情況下做到這一點很有可能,只需創建自己的框架。無論如何,這不是一件非常困難的事情。

由於不是特定應用,你的MVC框架,就必須做到以下幾點:

  1. 重定向所有TRAFIC到中央頁面,讓每一個請求得到 正確處理。
  2. 從請求url中提取控制器和操作。 (例如,請求http://yoursite.com/Task/Add,則必須將其轉換爲TaskController上的Add方法)
  3. 加載控制器類(在我們的示例TaskController中)。也許使用Autoload。
  4. 呼叫控制器
  5. Add方法顯示的結果

有多種方式來實現的觀點,你可以效仿ASPMVC,並讓每個控制器的行動返回ActionResult,其中有一個方法執行。然後,那個過載,ViewResult將負責加載正確的視圖,並將其包含在適當的ModelData中。

2

雖然你的問題有點過於寬泛,但我想我可以提供一些幫助。

我在開始使用框架時遇到的第一個問題是:我應該使用哪個框架?在你的情況下,我不會嘗試構建一個沒有預製框架的MVC網站。你最終要寫的大部分架構已經完成了數十次。

像數據庫抽象,登錄系統等事情是無聊的寫。不妨使用已經有這些東西的框架。

我會極力推薦這本書:http://www.amazon.com/Building-Applications-Symfony-CakePHP-Framework/dp/0470887346/ref=sr_1_2?ie=UTF8&qid=1315227178&sr=8-2。它將引導您使用三種不同的PHP MVC框架構建一個簡單的MVC網站。到本書結束時,您將對每個框架有足夠的經驗,以便您可以選擇哪一個最適合您。

或者,如果您想編寫自己的框架以便學習如何完成,我建議TJHeuvel的答案。另一種選擇是閱讀現有框架的源代碼,以便了解其他人是如何實現它的。

0

Kheldar的評論非常有道理。本教程實際上涵蓋了使用MVC模式製作微型框架。

儘管你需要給它添加 - 從,這是一個很好的孩子步入開發自己的MVC框架中添加自定義路線和某種路由引擎的方面,但除了..

6

這裏的來自RASMUS LERDORF自己的問題的確切答案。 Read through

+0

它看起來像http://talks.php.net/presentations/slides/mvc/example/model/db.phps不工作的嵌入式代碼示例。目前,它顯示「歡迎使用PHP演示系統」,這裏列出了存儲在這個系統中的所有可用演示類別。「有沒有人有PHP創建者教程的完整備份? – baptx

+0

過期的文章 –

5

爲了記錄在案:

它做在PHP中的MVC並不難,其更具有受到紀律處分,而成爲一個難點相關任務。

一個)模型(一個或多個)(可選,可以使用在PHP數組)

<?php 
    class MyModel() { 
    } 
?> 

B)路線(的index.php?)

<?php 
include "..."; 
// here we collects all the information, such post,get and path values 
$action=...; 
$param=....; 
switch($controller) { 
     case "my": // www.myweb.com/my/action 
     include "controller\MyController.php"; // open the right controller. 
     break; 
} 
?> 

C)控制器

<?php 
include "model\MyModel.php"; 
switch($action) { 
    case "add": 
     // here live the logic, information, call for services and such. 
     $model=....; 
     // and finally... 
     include "view\MyView.php"; 
     break; 
} 
?> 

d)查看

<html> 
    <body> 
     <?=$model->field;?> 
    </body> 

<html> 

備註:

a)視圖應儘可能乾淨。認爲該視圖可以由不關心php的網頁設計師創建。

b)視圖始終是過程的最後一步。視圖網絡總是不返回任何內容。