[thinkPHP5项目实战_09]后台添加栏目及验证
文章栏目9829820
发布时间:2019-12-28 09:19:37

概述

1.后台的模板分离和URL生成

上一篇介绍了前台页面的模板分离和URL生成,构建博客系统还需要后台管理系统,通过类似的方法构建后台的模板

[thinkPHP5项目实战_09]后台添加栏目及验证

其中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助手函数实现

[thinkPHP5项目实战_09]后台添加栏目及验证

2.创建本地数据库

访问http://localhost/phpMyAdmin/index.php

默认账号和密码为root,创建数据库tp5,新建数据表tp6cate,字段数为5

分别新建五个字段:

ID,类型mediumint,自动增加,设为主键,备注栏目ID
catename,类型varchar,长度30,备注栏目名称
keyword,类型varchar,长度150,备注栏目关键词
desc,类型text,备注栏目描述
type,类型tinyint,默认值为0,备注栏目类型

[thinkPHP5项目实战_09]后台添加栏目及验证

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.实现效果

[thinkPHP5项目实战_09]后台添加栏目及验证