欢迎来到元素模板ys720.com,本站提供专业的织梦模板PBOOTCMS模板网站模板网站修改/网站仿站
当前位置:主页 > 程序教程 > thinkphp教程 >
thinkphp教程

Thinkphp5使用Validate验证防止表单重复提交的两种方式

(元素模板) / 2022-11-18 21:54
THINKPHP5 如何防止重复提交表单?元素模板为你解答
只需要在表单里面加上一个“__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());
		}	
    }
}

 

Copyright @ 2013-2021 元素模板 www.ys720.com All Rights Reserved. 版权所有 元素模板 www.ys720.com