第一眼看到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数据库