第一眼看到symfony的代碼結構會讓人感到擔心,他有非常多的目錄和腳本組成,並且文件由PHP類、HTML以及PHP和HTML的混合代碼組成。但一旦你瞭解了背後的祕密,你就會感覺symfony的這種結構非常的自然。
MVC模式
Symfony基於傳統的MVC架構,MVC包括三層
- 模型(Model)表述應用操作的信息
- 視圖(View)將模型轉換爲適合用戶交互的網頁形式
- 控制(Controller)響應用戶動作並適時調用模型或者視圖的變動
MVC模式圖
MVC分層
爲了幫助理解MVC的好處,讓我們來看看如何將一個PHP應用程序轉換到MVC架構。
單層程序(不分層)
在單層PHP文件,顯示數據庫數據可能像下面的代碼所寫:
<?php
// Connecting, selecting database $link = mysql_connect('localhost', 'myuser', 'mypassword'); mysql_select_db('blog_db', $link);
// Performing SQL query $result = mysql_query('SELECT date, title FROM post', $link);
?>
<html> <head> <title>List of Posts</title> </head> <body> <h1>List of Posts</h1> <table> <tr><th>Date</th><th>Title</th></tr> <?php // Printing results in HTML while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "/t<tr>/n"; printf("/t/t<td> %s </td>/n", $row['date']); printf("/t/t<td> %s </td>/n", $row['title']); echo "/t</tr>/n"; } ?> </table> </body> </html>
<?php
// Closing connection mysql_close($link);
?> |
這能快速編寫,快速執行但卻難以維護,下面是代碼的幾個主要問題:
l 沒有錯誤檢測(數據庫連接失敗會怎樣?)
l HTML與PHP代碼混雜在一起
l 代碼完全綁定到了MYSQL數據庫