[thinkPHP5项目实战_14]场景验证

来源:互联网 发布:javascript eval 解密 编辑:程序博客网 时间:2024/05/06 19:21

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

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

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

<?phpnamespace 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之前,进行场景过滤,只验证验证器中定义的场景。

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

原创粉丝点击