只需要在表单里面加上一个“__token__”唯一码,如下:
<input type="hidden" name="__token__" value="{$Request.token}" />
方法一:在需要验证的控制器里写完整的Validate
<?php namespace app\index\controller; use think\Validate;//1.引用Validate类 class Test extends Controller{ public function index(){ $data=input(''); //2.验证路由 $rule = [ '__token__' => 'require|token', ]; //3.错误信息 $msg = [ '__token__' => '请不要重复提交!', ]; //4.引入验证类 $validate = Validate::make($rule, $msg); if (!$validate->check($data)) { $this->error($validate->getError()); } } }
方法二:单独写一个Validate实现类
1、在application\common\validate目录下创建一个Vdate.php,目录没有自己创建,注意包名路径不能错。Vdate.php代码如下:
<?php namespace app\common\validate; use think\Validate; class Vdate extends Validate{ //每个字段对应一个规则,这是第一层 protected $rule=[ '__token__'=>'require|token',/* 防止表单重复提交使用 */ 'name' => 'require|max:10', 'age' => 'number|between:1,120', 'email' => 'email', //["name","require|max:10","不能为空|分类名不能超过10个字符"], //["id","number","必须是数字"], //["status","number|in:1,0,-1","必须是数字|必须是是0,-1,1"], ]; protected $message = [ '__token__.token' => '表单不能重复提交', 'name.require' => '名称必须', 'name.max' => '名称最多不能超过10个字符', 'age.number' => '年龄必须是数字', 'age.between' => '年龄只能在1-120之间', 'email' => '邮箱格式错误', ]; //应用的场景,这是第二层 protected $scene=[ "submit" => ["__token__"], ]; }
2、在控制器里实例化Vdate,并且调用
<?php namespace app\index\controller; class Test extends Controller{ public function index(){ $data=input(''); //使用Validate验证 $validate=validate("Vdate"); if(!$validate->scene("submit")->check($data)){ //内置错误返回 $this->error($validate->getError()); } } }