THINKPHP5验证的使用(表单验证等)

鉴于之前博客中一直都没有验证器这块的教程,而且偶然发现用的东西还比较多,所以这里我们就直接写一篇教程,带大家领悟下TP5中验证器的使用(当然这个东西会了,laravel下的使用时差不多的方式,下面我们就开始今天的验证器。

首次我们先使用独立验证(即不需要在模块目录下创建验证文件夹,如下:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/9/27 0027
 * Time: 00:50
 */

namespace app\index\controller;


use think\Controller;
use think\Validate;

class User extends Controller
{

    /**
     * 验证器中的独立验证使用
     * 独立验证实际上的意思就是说,你单独拿出来使用,不用在模块目录下创建验证目录
     * 官方手册中说 任何时候,都可以使用Validate类进行独立的验证操作
     * 这里我的理解是,只要引用了这个类,那么大家都可以在控制层或者模型层使用它。
     */


    /**
     * 所以第一步我们需要在命名空间namespace 下面引入验证类Validate
     * 下面我新建一个公共的方法index 并使用独立验证
     */

    public function index(){


        return $this->fetch();
    }

    public function infomation(){
        /**
         * 实例化验证类
         * 传入一个数组
         *
         * 键-值 require的意思是必填的意思,
         * max的意思为最长只能为25个长度
         * 想要添加多个验证条件数线( | )分隔即可
         *
         * 内置了email验证格式,所以直接 email验证条件即可
         */

        $validate=new Validate(
            [
                'name'=>'require|max:25',
                'email'=>'email',

            ]
        );

        /**
         * 接收到的数据,比如是form表单提交的
         * 或者ajax提交的数据,官方手册中 是直接赋予了值,
         * 获取接收到的值,你可以使用input()方法或者request()方法亦可
         * 像下面这样
         */

        $data=[
            'name'=>input('post.name'),
            'email'=>input('post.email'),
        ];

        /**
         * 判断验证结果
         * 验证结果可以直接调用check()方法
         *
         * 下面的意思是如果验证失败
         * 打印错误信息 获取错误信息可以直接实例验证类调用getError()方法即可
         */
        
        if(!$validate->check($data)){
            dump($validate->getError());
        }else{
            return "验证成功";
        }


    }

}

视图层代码(View层):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>主页</title>
    <script type="application/javascript" src="__JS__/jquery.js"></script>
    <link rel="stylesheet" type="text/css" href="__STATIC__/bootstrap/css/bootstrap.min.css"/>
    <script type="application/javascript" src="__STATIC__/bootstrap/js/bootstrap.min.js"></script>
    <script type="application/javascript" src="__STATIC__/vue/vue.js"></script>

</head>
<body>
    <h1>validate</h1>
    <form action="{:url('index/User/infomation')}" method="post">
        <input type="text" name="name" placeholder="name">
        <input type="text" name="email" placeholder="email">
        <input type="submit" value="提交">
    </form>
</body>
</html>

 

默认第一次的页面是这样子的,如下图:

THINKPHP5验证的使用(表单验证等)

 

然后我们在input框中输入name值和email值 :

我们先不输入name值,邮箱输入正确的格式会出现如下的样子:

THINKPHP5验证的使用(表单验证等)

THINKPHP5验证的使用(表单验证等)

当然这里如果我们填入正确的格式值,页面会返回我们验证成功的字样(这里的验证字段信息是我在控制层直接return的),像这样子的页面,当然在实际生产环境中你们可以直接重定向到指定的页面下。

THINKPHP5验证的使用(表单验证等)

下面我们使用验证器方式:

首先我们需要在模块目录下创建validate目录,然后在此目录下创建验证器文件

THINKPHP5验证的使用(表单验证等)

下面是验证层验证器的代码:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/9/27 0027
 * Time: 01:59
 */

namespace app\index\validate;


use think\Validate;

class User extends Validate
{
    /**
     * 继承验证器类 think\Validate
     */

    /**
     * 定义受保护的属性 $rule 为一个数组格式(也就是验证规则信息)
     * 注意属性变量名称这里一定更要一致哦 
     * 像下面这样我们就定义好了一个最简单的验证器
     * 然后我们在需要的地方去调用这个验证器 User,比如控制层Controller
     */

    protected $rule=[
        'name'=>'require|max:25',
        'email'=>'email',
    ];


}

 

下面是视图层(View层)代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>主页</title>
    <script type="application/javascript" src="__JS__/jquery.js"></script>
    <link rel="stylesheet" type="text/css" href="__STATIC__/bootstrap/css/bootstrap.min.css"/>
    <script type="application/javascript" src="__STATIC__/bootstrap/js/bootstrap.min.js"></script>
    <script type="application/javascript" src="__STATIC__/vue/vue.js"></script>

</head>
<body>
    <h1>validate</h1>
    <form action="{:url('index/User/lists')}" method="post">
        <input type="text" name="name" placeholder="name">
        <input type="text" name="email" placeholder="email">
        <input type="submit" value="提交">
    </form>
</body>
</html>

这里只是简单了修改了我们form表单提交的action地址。

下面是控制层(Controller层)代码 :

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/9/27 0027
 * Time: 00:50
 */

namespace app\index\controller;


use think\Controller;
use think\Loader;
use think\Validate;

class User extends Controller
{

    /**
     * 验证器中的独立验证使用
     * 独立验证实际上的意思就是说,你单独拿出来使用,不用在模块目录下创建验证目录
     * 官方手册中说 任何时候,都可以使用Validate类进行独立的验证操作
     * 这里我的理解是,只要引用了这个类,那么大家都可以在控制层或者模型层使用它。
     */


    /**
     * 所以第一步我们需要在命名空间namespace 下面引入验证类Validate
     * 下面我新建一个公共的方法index 并使用独立验证
     */

    public function index(){


        return $this->fetch();
    }

    public function infomation(){
        /**
         * 实例化验证类
         * 传入一个数组
         *
         * 键-值 require的意思是必填的意思,
         * max的意思为最长只能为25个长度
         * 想要添加多个验证条件数线( | )分隔即可
         *
         * 内置了email验证格式,所以直接 email验证条件即可
         */

        $validate=new Validate(
            [
                'name'=>'require|max:25',
                'email'=>'email',

            ]
        );

        /**
         * 接收到的数据,比如是form表单提交的
         * 或者ajax提交的数据,官方手册中 是直接赋予了值,
         * 获取接收到的值,你可以使用input()方法或者request()方法亦可
         * 像下面这样
         */

        $data=[
            'name'=>input('post.name'),
            'email'=>input('post.email'),
        ];

        /**
         * 判断验证结果
         * 验证结果可以直接调用check()方法
         *
         * 下面的意思是如果验证失败
         * 打印错误信息 获取错误信息可以直接实例验证类调用getError()方法即可
         */

        if(!$validate->check($data)){
            dump($validate->getError());
        }else{
            return "验证成功";
        }

    }


    public function lists(){
        /**
         * 创建一个lists方法
         *  $data为验证的数据 为一个数组
         */

        $data = [
            'name'=>input('post.name'),
            'email'=>input('post.email')
        ];

        /**
         * 静态调用实例中的验证器方法
         */

        $validate = Loader::validate('User');

        /**
         * 或者也可以使用助手函数 validate()函数
         * 任意选择一个即可
         */

//        $validate = validate('User');

        /**
         * 同样是调用验证方法check方法
         * 判断验证结果
         * getError()返回错误信息
         */

        if(!$validate->check($data)){
            dump($validate->getError());
        }else{
            return "验证成功";
        }
    }

}

下面我试一试效果,图如下:

THINKPHP5验证的使用(表单验证等)

THINKPHP5验证的使用(表单验证等)

下面是验证成功的样子:

THINKPHP5验证的使用(表单验证等)

 

THINKPHP5验证的使用(表单验证等)

这里独立验证和验证器的使用,剩余的部分大家参照手册即可明白剩余的操作及含义了,如果还有不太明白的地方大家可以在下方留言给我,我收到第一时间回复,最后最近重看无间道3中有这么一句话送给大家:

地藏菩萨本原经卷上: 如是等辈,当堕无间地狱,千万意劫,以此连绵,求无出期。

晚安

 

上一篇:[BJDCTF 2nd]old-hack


下一篇:Linux部署thinkphp5,nginx服务器一直访问index/index问题解决方法