前端功能和布局我们已经完成了;
现在我们开始从后台来实现这些功能把;
①完成添加留言的功能;前端页面
{% extends "layout.html" %}
{% block content %}
<center>
<form action="/index/save" method="post"><span style="color:#FF0000;">//使用from表单提交,提交到index/save动作中;</span>
<table>
<tr>
<td>留言</td>
<td><input type="text" name="text" placeholder="请留言"></td>
</tr>
<tr>
<td><input type="reset" value="清空"></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</center>
{% endblock %}
②在save方法中接收数据并连接model层;
因为我们使用的是框架;直接接收POST不安全;所以我们要制作一个post()方法;
这些方法我们集中放在common目录中function文件中;
<span style="color:#FF0000;">/*
* 1:$name 对应值
* 2:$default 默认值
* 3:$fitt 过滤方法 'int'
*/</span>
function post($name,$default=false,$fitt=false)<span style="color:#FF0000;">//创建三个参数,一个必选项,两个配置项;false为布尔值所以不能用引号</span>
{
if(isset($_POST[$name])){
if($fitt){
switch($fitt){
case 'int':<span style="color:#FF0000;">//判断如果$fitt参数如果是int型则检测</span>
if(is_numeric($_POST[$name])){<span style="color:#FF0000;">//检测变量是否是数字</span>
return $_POST[$name];
}else{
return $default;
}
break;
default: ;
}
}else{
return $_POST[$name];
}
}else{
return $default;
}
}
在控制器接收数据打包传到MODEL层;
public function save()
{
//p($text);
//echo $_POST['text'];
session_start();
$_SESSION['name']='XXX';
//$text=$_POST['text'];
$data['name']=$_SESSION['name'];
$data['text'] = post('text');
$data['datatime']=date('Y-m-d H:i:s');
$model=new kModel();
$str=$model->addOne($data);
//p($str);die;
if($str!='0'){
jump('/index/index');<span style="color:#FF0000;">//添加成功需要跳转页面,所以我们还需要创建一个跳转方法;</span>
}else{
echo '添加失败';
}
}
model处理添加入库;
//添加留言
public function addOne($data)
{
return $this->insert($this->table,$data);<span style="color:#FF0000;">//添加成功后返回值为添加主键值;失败则为0</span>
}
在数据库中查看数据存在则,添加成功
跳转方法创建
function jump($url)
{
header('location:'.$url);<span style="color:#FF0000;">//通过header跳转,所以我们只需要接收控制器和方法参数</span>
exit();
}
③展示所有留言,我们需要用到index方法;同养需要调用model层提取数据库数据;
//所有留言
public function index()
{
$model=new kModel();
$data=$model->all();
//var_dump($data);exit;
$this->assign('data',$data);<span style="color:#FF0000;">//传递数据到视图层</span>
$this->display('index.html');<span style="color:#FF0000;">//连接视图层</span>
}
modelc层
//查询所有留言
public function all()
{
$ret=$this->select($this->table,'*',['ORDER'=>['datatime'=>'ASC']]);
//p($ret);exit;
return $ret;<span style="color:#FF0000;">//返回查询到的数据</span>
}
views层
{% extends "layout.html" %}
{% block content %}
<center>
<form>
<table>
<tr>
<td>姓名</td>
<td>留言内容</td>
<td>留言时间</td>
<td>操作</td>
</tr>
{% for val in data %}<span style="color:#FF0000;">//通过for循环把数组展示出来</span>
<tr>
<td>{{ val.name }}</td>
<td>{{ val.text }}</td>
<td>{{ val.datatime }}</td>
<td><a href="/index/del/id/{{ val.id }}">删除</a></td>
</tr>
{% endfor %}
</table>
</form>
</center>
{% endblock %}
④跟着展示我们顺便做一下删除功能;删除功能很简单,只需要把ID传递到控制器就行了
<td><a href="/index/del/id/{{ val.id }}">删除</a></td><span style="color:#FF0000;">//传递参数</span>
控制器接收数据,同post一样,我们需要做一个get方法验证参数;创建方法与post相同
//删除留言
public function del()
{
$id=get('id',0,'int');
if($id){
$model=new kModel();
$ret = $model->delOne($id);
if($ret){
jump('/');
}else{
exit('删除失败');
}
}else{
exit('参数错误');
}
//p($id);
}
创建get();
<span style="color:#FF0000;">/*
* 1:$name 对应值
* 2:$default 默认值
* 3:$fitt 过滤方法 'int'
*/</span>
function get($name,$default=false,$fitt=false)
{
if(isset($_GET[$name])){
if($fitt){
switch($fitt){
case 'int':
if(is_numeric($_GET[$name])){<span style="color:#FF0000;">//检测变量是否是数字</span>
return $_GET[$name];
}else{
return $default;
}
break;
default: ;
}
}else{
return $_GET[$name];
}
}else{
return $default;
}
}
model层
//删除留言
public function delOne($id)
{
$ret = $this->delete($this->table,array(
'id'=>$id
));
if($ret !== false){
return true;
}else{
return false;
}
}
删除成功;
这样,我们的mvc搭建,以及验证项目就已经完成了;
如果你觉得我们的框架过于简单,你还可以在我们的思想上继续完善框架,添加扩展,比如缓存丶cookie类丶session类丶上传文件等等;
这样我们的MVC搭建就算结束了