1.后台的模板分离和URL生成
上一篇介绍了前台页面的模板分离和URL生成,构建博客系统还需要后台管理系统,通过类似的方法构建后台的模板
其中cate.php为文章管理控制器,Cate类下面的add函数用于添加文章
<?php
namespace app\admin\controller;
use think\Controller;
class Cate extends Controller
{
public function lists()
{
return $this->fetch();
}
public function add()
{
return $this->fetch();
}
}
index.php为后台首页控制器:
<?php
namespace app\admin\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch();
}
}
完成后台模板引入后,
后台首页地址为:默认访问admin模块下的index控制器下的操作方法
http://localhost/tp5/public/index.php/admin
后台查看文章列表地址为:访问admin模块下的cate控制器下的lists操作方法
http://localhost/tp5/public/index.php/admin/cate/lists
后台添加文章的地址为:访问admin模块下的cate控制器下的add操作方法
http://localhost/tp5/public/index.php/admin/cate/add
栏目之间跳转通过url助手函数实现
2.创建本地数据库
访问http://localhost/phpMyAdmin/index.php
默认账号和密码为root,创建数据库tp5,新建数据表tp6_cate,字段数为5
分别新建五个字段:
ID,类型mediumint,自动增加,设为主键,备注栏目ID
catename,类型varchar,长度30,备注栏目名称
keyword,类型varchar,长度150,备注栏目关键词
desc,类型text,备注栏目描述
type,类型tinyint,默认值为0,备注栏目类型
3.前台add.html页面构建
使用form表单提交数据,post提交方式,action为空则提交到当前控制器的操作方法,即add方法
<form action="" method="post" id="myform" name="myform" enctype="multipart/form-data">
<table class="insert-tab" width="100%">
<tbody>
<tr>
<th width="10%">栏目名称:</th>
<td>
<input class="common-text required" id="catename" name="catename" size="50" value="" type="text">
</td>
</tr>
<tr>
<th>关键词:</th>
<td>
<input class="common-text" name="keywords" size="50" value="" type="text">
</td>
</tr>
<tr>
<th>栏目类型:</th>
<td>
<input name="type" value="1" type="checkbox" /> 留言板</td>
</tr>
<tr>
<th>内容:</th>
<td>
<textarea name="desc" class="common-textarea" id="desc" cols="30" style="width: 98%;" rows="10"></textarea>
</td>
</tr>
<tr>
<th></th>
<td>
<input class="btn btn-primary btn6 mr10" value="提交" type="submit">
<input class="btn btn6" οnclick="history.go(-1)" value="返回" type="button">
</td>
</tr>
</tbody>
</table>
</form>
4.数据库连接
打开application文件夹下面的database.php文件,填写本地数据库信息
username和password默认都为root,database这里为tp5,
因为tp5中的数据表为tp5_cate,则数据表前缀prefix为tp5_
保存
5.提交数据验证
提交请求的数据经过验证后才能存入数据库中,tp5提供了验证器用于验证数据
定义一个\app\index\validate\Cate验证器类用于Cate的验证,在admin模块下新建validate文件夹,新建cate.php用于验证:
<?php
namespace app\admin\validate;
use think\Validate;
class Cate extends Validate
{
//验证规则
protected $rule = [
// catename验证,必须,长度不能超过25,名称不能重复
'catename' => 'require|max:25|unique:cate',
];
//验证提示
protected $message = [
'catename.unique' => '栏目名称不能重复',
'catename.require' => '栏目名称必须',
];
}
以上根据tp5的文档来定义的验证规则
6.数据接收和处理
数据提交到Cate控制器下的add方法,因此,需要在该方法中对提交的数据进行处理:
<?php
namespace app\admin\controller;
use think\Controller;
class Cate extends Controller
{
public function lists()
{
return $this->fetch();
}
public function add()
{
//reuqest方法继承于Controller,使用request助手函数判断请求方式
//使用助手函数input接收接收输入的值
if(request()->isPost()){
$data = [
'catename'=>input('catename'),
'keywords'=>input('keywords'),
'desc'=>input('desc'),
'type'=>input('type') ? input('type') : 0,//如果type为空则为0
];
//对输入的内容进行验证,使用tp5推荐的验证器的方式
$validate = \think\Loader::validate('Cate');
if($validate->check($data)){
//将$data插入数据库,使用tp5数据库添加数据的方法
//在database.php配置文件中配置了数据库前缀(prefix),那么可以直接使用 Db 类的 name 方法提交数据
$res = \think\Db::name('cate')->insert($data);
//添加判断,成功则跳转到lists方法
if($res){
return $this->success('添加栏目成功','lists');
}else{
return $this->error('添加栏目失败');
}
}else{
//验证失败输出提示信息
return $this->error($validate->getError());
}
return;
}
return $this->fetch();
}
}
7.实现效果