天下框架一般黑,如果你还不理解什么是MVC

in web技术 with 0 comment 访问: 15,439 次

MVC (模型-视图-控制器)

<?php
// index.php
$link = mysql_connect('localhost', 'dbuser', 'dbpassword');

mysql_select_db('blog', $link);
 
$result = mysql_query('SELECT id, title FROM post', $link);
?>
 
<!DOCTYPE html>
<html>
    <head>
        <title>文章列表</title>
    </head>
    <body>
        <h1>文章列表</h1>
        <ul>
            <?php while ($row = mysql_fetch_assoc($result)): ?>
            <li>
                <a href="/show.php?id=<?php echo $row['id'] ?>">
                    <?php echo $row['title'] ?>
                </a>
            </li>
            <?php endwhile; ?>
        </ul>
    </body>
</html>
 
<?php
mysql_close($link);
?>

以上代码建议使用mysqli或者pdo方法

这样一个页面将所有的操作做完,但是维护起来很麻烦,尤其是扩展性十分低。

抽离表现层

<?php
// index.php
$link = mysql_connect('localhost', 'dbuser', 'dbpassword');

mysql_select_db('blog', $link);
 
$result = mysql_query('SELECT id, title FROM post', $link);
 
$posts = array();

while ($row = mysql_fetch_assoc($result)) {
    $posts[] = $row;
}
 
mysql_close($link);
 
// 包含HTML的代码 
require 'templates/list.php';

下面是单独的html显示界面,文件里嵌套模板风格的php代码:

<!--templates/list.php-->

<html>
    <head>
        <title>文章列表</title>
    </head>
    <body>
        <h1>文章列表</h1>
        <ul>
            <?php foreach ($posts as $post): ?>
            <li>
                <a href="/read?id=<?php echo $post['id'] ?>">
                    <?php echo $post['title'] ?>
                </a>
            </li>
            <?php endforeach; ?>
        </ul>
    </body>
</html>

MVC

从应用程序中将核心行为和数据访问功能分离出来放入新的model.php文件中。


<?php
// model.php
function open_database_connection()
{
    $link = mysql_connect('localhost', 'dbuser', 'dbpassword');

    mysql_select_db('blog', $link);
 
    return $link;
}
 
function close_database_connection($link)
{
    mysql_close($link);
}
 
function get_all_posts()
{
    $link = open_database_connection();
 
    $result = mysql_query('SELECT id, title FROM post', $link);

    $posts = array();

    while ($row = mysql_fetch_assoc($result)) {
        $posts[] = $row;
    }
    close_database_connection($link);
 
    return $posts;
}

现在我们的index.php就是一个控制器,她变成了这个样子:

//index.php
<?php

require_once 'model.php';
 
$posts = get_all_posts();
 
require 'templates/list.php';

现在控制器的作用仅仅是从model(model.php)层中得到数据,然后调用一个模板来呈现这些数据。一个最简单的MVC诞生了。

赞赏支持
Responses