[thinkPHP5项目实战_14]场景验证
文章 1563 0 0 0
发布时间:2019年12月28日

概述

thinkPHP5提供了场景验证功能,参考文档位于https://www.kancloud.cn/manual/thinkphp5/129322

比如在创建栏目中,我们不允许关键词为空,而在编辑栏目时允许关键词为空,在同一个验证器中,可以针对这些不同的场景进行不同的验证定义

首先打开之前写好的cate验证器application/admin/validata/Cate.php,添加指定处代码:

<?php
namespace app\admin\validate;
use think\Validate;
class Cate extends Validate
{
    //验证规则
    protected $rule = [
        // catename验证,必须,长度不能超过25,名称不能重复
        'catename'  =>  'require|max:25|unique:cate',
        'keywords' => 'require',
    ];

    //验证提示
    protected $message  =   [
        'catename.unique' => '栏目名称不能重复', 
        'catename.max' => '栏目名称不能大于5个字符',
        'catename.require' => '栏目名称必须',
        'keywords.require' => '栏目关键词必须',
    ];
    //添加代码验证场景
    protected $scene = [
        'edit'  =>  ['catename'],
    ];
}

在$scene规则中定义好需要验证的字段为catename,只在edit条件下验证。

在cate的控制器文件aplication/admin/controller/Cate.php的edit操作方法中添加指定处代码:

public function edit()
{
    //获取修改的信息
    $id=input('id');
    $cates = db('cate')->where('ID',$id)->find();
    $this->assign('cates',$cates);//模板赋值
    //修改后提交
    if(request()->isPost()){
        $data=[
            'ID'=>input('id'),
            'catename'=>input('catename'),
            'keywords'=>input('keywords'),
            'desc'=>input('desc'),
            'type'=>input('type') ? input('type') : 0,
        ];
        //验证
        $validate = \think\Loader::validate('Cate');
//添加代码->scene('edit')
        if($validate->scene('edit')->check($data)){
            $res = \think\Db::name('cate')->update($data);
            if($res){
                return $this->success('修改栏目成功','lists');
            }else{
                return $this->error('修改栏目失败');
            }
        }else{
            //验证失败输出提示信息
            return $this->error($validate->getError());
        }
    }
    return $this->fetch();
}

在验证data之前,进行场景过滤,只验证验证器中定义的场景。

这样,自定义场景验证完成。

评论专区
Q群
Q群
Q群
反馈
纠错