Blogger Information
Blog 71
fans 1
comment 1
visits 86945
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP之初识MVC
小威的博客
Original
773 people have browsed it

先看一个完整的MVC案例:

实例

<?php 
//连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');

//创建预处理语句
$stmt = $pdo->prepare("SELECT staff_id,name,age,salary FROM staff LIMIT :num;");

//执行查询
$stmt -> bindValue(':num',10,PDO::PARAM_INT);
$stmt -> execute();

//解析结果集
$result = $stmt -> fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>MVC模式简介</title>
	<style type="text/css">
		table,th,td {
			border:1px solid black;
		}

		table {
			border-collapse: collapse;
			width: 60%;
			margin: 30px auto;
			text-align: center;
		}
		table tr:first-child {
			background-color: lightgreen;
		}
		table caption {
			font-size:1.5em;
			margin-bottom: 15px;
		}
	</style>
</head>
<body>
	<table>
		<caption>员工信息表</caption>
		<tr>
			<th>ID</th>
			<th>姓名</th>
			<th>年龄</th>
			<th>工资</th>
		</tr>
		<?php foreach ($result as $staff) : ?>
		<tr>
			<td><?php echo $staff['staff_id'] ?></td>
			<td><?php echo $staff['name'] ?></td>
			<td><?php echo $staff['age'] ?></td>
			<td><?php echo $staff['salary'] ?></td>
		</tr>
		<?php endforeach; ?>

	</table>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


下面我们把以上案例进行拆分出 M V C三部分


  • M:Model模型层,用来实现也数据库相关的操作

<?php 
namespace mvc\model;
class Model 
{
public $pdo = null;
public $result = [];
//构造方法
public function __construct($dbname, $user, $pass)
{
//连接数据库
$this->pdo = new \PDO('mysql:host=localhost;dbname='.$dbname,$user,$pass);
}
//执行查询并获取结果集
public function select($table, $num)
{
//创建预处理语句:将复制过来的 $pdo 替换成 $this->pdo
$stmt = $this->pdo->prepare("SELECT staff_id,name,age,salary FROM {$table} LIMIT :num;");
//执行查询
$stmt -> bindValue(':num',$num,\PDO::PARAM_INT);
$stmt -> execute();
//解析结果集:将复制过来的 $result 替换成成 $this->result
$this->result = $stmt -> fetchAll(\PDO::FETCH_ASSOC);
}
}


  • V:View视图层,用来实现用户界面与数据展示

<?php 
namespace mvc\view;
class View
{
public $data = [];
public function __construct($data)
{
$this->data = $data;
}
public function getData()
{
return $this->data;
}
public function display($data)
{
$table = '
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC模式简介</title>
<style type="text/css">
table,th,td {
border:1px solid black;
}
table {
border-collapse: collapse;
width: 60%;
margin: 30px auto;
text-align: center;
}
table tr:first-child {
background-color: lightgreen;
}
table caption {
font-size:1.5em;
margin-bottom: 15px;
}
</style>
</head>
<body>
<table>
<caption>员工信息表</caption>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>工资</th>
</tr>';
foreach ($data as $staff) {
$table .= '<tr>';
$table .=  '<td>'.$staff['staff_id'].'</td>';
$table .=  '<td>'.$staff['name'].'</td>';
$table .=  '<td>'.$staff['age'].'</td>';
$table .=  '<td>'.$staff['salary'].'</td>';
}
$table .= '</table>
</body>
</html>';
   echo $table;
}
}


  • C:Controller 控制器层,根据视图层的要求选择合适的模型

<?php 
namespace  mvc\controller;
class Controller 
{
public function index()
{
require './model/Model.php';
$model = new \mvc\model\Model('php','root','root');
$model -> select('staff',10);
$result = $model -> result;
require './view/View.php';
$view = new \mvc\view\View($result);
$data = $view->getData();
$view->display($data);
}
}


下面是模型和控制器测试文件  test.php

<?php 
require './model/Model.php';
use mvc\model\Model;
$model = new Model('php','root','root');
$model -> select('staff',10);
$result = $model -> result;
// print_r($result);
require './view/View.php';
use mvc\view\View;
$view = new View($result);
$data = $view->getData();
$view->display($data);
//这些操作应该放在控制器


最后是测试文件 index.php

<?php 
//导入控制器类
require 'controller/Controller.php';
use mvc\controller\Controller;
$controller = new Controller;
$controller->index();


MVC的知识点:

MVC是最经典,也是最流行的Web项目设计思想

M:Model模型层,用来实现也数据库相关的操作

V:View视图层,用来实现用户界面与数据展示

C:Controller 控制器层,根据视图层的要求选择合适的模型


第一步. 创建temp.php文件

1. 完成模板创建

2. 数据库连接与查询(pdo实现)


第二步. MVC目录架构

1. 创建model 模型层目录

.创建Model类

.创建构造器完成数据库连接

.select()方法完成结果集查询

2. 创建test.php测试脚本

.完成模型类的测试,确保能正常工作

3. 创建view 视图层目录

.创建View类

.类中声明三个方法

.构造器方法:实现模板赋值

.getData方法: 格式化数据

.display(): 渲染模板

4. 再次打开test.php测试脚本

.对刚才创建的视图类进行测试

5. 创建controller 控制器目录

.仅创建一个index方法

.将test.php内容复制进去即可

6. 创建项目入口文件

.入口文件一般是:index.php

.在mvc目录下创建index.php

.入口文件只做一件事:实例化控制器并调用index方法

7. 最终将项目跑起来,实现与temp.php一样的效果,但结构更合理

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post