MVC是一种人为划分应用开发流程的方式,使开发工作更加高效;
它有三个部分:模型(Model)、视图(View)、控制器(Controller)
传统WEB开发
传统WEB开发将数据处理与展示写在一起,视图直接从模型获取数据并显示,代码复杂,维护困难,不利于团队分工,开发效率低。如果业务逻辑不复杂,通常一个PHP文件就能搞定。
代码语言:javascript复制<?php
// json数据
// 如果json数据为一个文件可以如下引用
// 读取 data.json 文件中的内容为一个字符串
// $json = file_get_contents('data.json');
$json = '[
{
"id": "1",
"navname": "岳泽以",
"navlink": "https://www.yuezeyi.com/",
"xuhao": "3"
},
{
"id": "2",
"navname": "百度",
"navlink": "https://www.baidu.com/",
"xuhao": "2"
},
{
"id": "3",
"navname": "腾讯",
"navlink": "https://www.baidu.com/",
"xuhao": "1"
}
]';
// 将json数据转为数组或对象
$data = json_decode($json, true);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3 style="text-align: center;">导航列表</h3>
<table border="1" cellspacing="0" width="50%" align="center">
<tr>
<th>id</th>
<th>navname</th>
<th>navlink</th>
<th>xuhao</th>
</tr>
<?php foreach ($data as $value) : ?>
<tr>
<td><?php echo $value['id'] ?></td>
<td><?php echo $value['navname'] ?></td>
<td><?php echo $value['navlink'] ?></td>
<td><?php echo $value['xuhao'] ?></td>
</tr>
<?php endforeach ?>
</table>
</body>
</html>
MVC模式开发
MVC就是各写各的,模型负责数据处理,而视图负责数据显示,具体流程如下:
- 创建一个模型,生成并返回一组数据;
- 创建一个视图,展示模型生成的数据;
- 创建一个控制器,将模型与视图整合;
- 创建一个入口文件,调用控制器完成操作;
创建模型文件(Model)
创建一个模型Model类,在类中创建getData()方法,这个方法会返回数据。
代码语言:javascript复制<?php
class Model
{
public function getData()
{
// 读取一个数据
$json = file_get_contents('data.json');
// 将json数据转为数组或对象
$data = json_decode($json, true);
// 返回数据
return $data;
}
}
创建视图文件(View)
创建View类,在类中创建display()方法,这个方法将数据以HTML方式显示。
代码语言:javascript复制<?php
class View
{
public function display($data)
{
// 这里做一个表格来显示数据
$table = ' <h3 style="text-align: center;">导航列表</h3>';
$table .= '<table border="1" cellspacing="0" width="50%" align="center">
<tr>
<th>id</th>
<th>navname</th>
<th>navlink</th>
<th>xuhao</th>
</tr>';
foreach ($data as $value) {
$table .= '<tr>';
$table .= '<td>' . $value['id'] . '</td>';
$table .= '<td>' . $value['navname'] . '</td>';
$table .= '<td>' . $value['navlink'] . '</td>';
$table .= '<td>' . $value['xuhao'] . '</td>';
$table .= '</tr>';
}
$table .= '</table>';
// 返回这个表格
return $table;
}
}
创建控制器文件(Controller)
创建Controller类,在类中创建show()方法,由该方法完成模型与视图的调用。
代码语言:javascript复制<?php
class Controller
{
public function show()
{
// 在model获取到数据
$data = Model::getData(); //调用Model类中静态方法getDdata
// 将数据传给view显示
echo View::display($data); //调用View类静态方法display()显示数据
}
}
创建入口文件(index.php)
入口文件的功能是完成类入件引入和控制器的调用。
代码语言:javascript复制<?php
require_once('Model.php'); //引入模型类
require_once('View.php'); //引入视图
require_once('Controller.php'); //引入控制器类
// 调用控制器中的show方法显示数据,写死了
// Controller::show();
//设置如果默认的控制器和类方法
$c = isset($_GEt['c']) ? $_GET['c'] : 'Controller'; //获取URL参数c=>控制器类名
$f = isset($_GET['f']) ? $_GET['f'] : 'show'; //获取URL参数a=>控制器类中的方法名
$controller = new $c; //实例化控制器,获取控制器对象$controller
$controller->$f(); //调用控制器中的show()方法
此时,访问你的地址/index.php
则会默认展示自己设置的控制器中的方法,如果访问以下地址:
/index.php?c=controller&f=show
则会访问Controller
控制器中的show
方法