TP6中驗證器的使用


TP6中驗證器的使用

 

一、定義驗證器

方式1:在目錄app目錄下,生成 validate目錄,然后創建相應的驗證器。
方式2:通過命令行工具執行命令: php think make:validate User
 
剛生成的驗證器,代碼如下:
<?php
declare (strict_types = 1);

namespace app\validate;
use think\Validate;

class User extends Validate
{
    /**
     * 定義驗證規則
     * 格式:'字段名' =>  ['規則1','規則2'...]
     *
     * @var array
     */
    protected $rule = [
    ];
    /**
     * 定義錯誤信息
     * 格式:'字段名.規則名' =>  '錯誤信息'
     *
     * @var array
     */
    protected $message = [
    ];
}

 

二、簡單驗證示例:

HTML代碼:

<form action="/index.php/test_validate/Validate1Act" method="post">

  <p>賬戶名: <input type="text" name="user_name" /> </p>
  <p>手機號: <input type="text" name="user_mobile" /> </p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;名: <input type="text" name="user_truename" /> </p>
  <p>身份證: <input type="text" name="user_idcard" /> </p>

  <p><input type="submit" value="提交"></p>
</form>
驗證器代碼:app/validate/User.php
<?php
declare (strict_types = 1);
namespace app\validate;
use think\Validate;

class User extends Validate
{
    /**
     * 定義驗證規則
     * 格式:'字段名' =>  ['規則1','規則2'...]
     *
     * @var array
     */
    protected $rule = [
        'user_name'     => 'require|length:6,20',
        'user_mobile'   => 'mobile',
        'user_truename' => 'chs',
        'user_idcard'   => 'idCard'
    ];
    /**
     * 定義錯誤信息
     * 格式:'字段名.規則名' =>  '錯誤信息'
     *
     * @var array
     */
    protected $message = [
        'user_name.require'     => '賬號不能為空',
        'user_name.length'      => '賬號長度需在6-20個字符之間',
        'user_mobile'           => '手機號格式不正確',
        'user_truename'         => '姓名必須為中文',
        'user_idcard'           => '身份證號格式不正確'
    ];
}

 

控制器代碼:

 

/**
     * 顯示表單模板
     */
    public function validate1()
    {
        return view("test/validate1");
    }

    /**
     * 驗證
     */
    public function Validate1Act()
    {
        $data = request()->param();


        try {
            $res = validate(User::class)->check($data);

            return  "驗證通過了";
        } catch (ValidateException $e) {
            
            return "驗證失敗:".$e->getError();
        }
    }

 

三、批量驗證

批量驗證就是,一次把所有的錯誤以數組的形式返回到控制器。
 
批量驗證,是需要增加 batch(true)的規則
 
代碼如下:
/**
     * 驗證
     */
    public function Validate1Act()
    {
        $data = request()->param();
        
        try {
            $res = validate(User::class)->batch(true)->check($data);

            return  "驗證通過了";
        } catch (ValidateException $e) {
            
            $msgs = $e->getError();
            $msgs_str = implode(",",$msgs);

            return "驗證失敗:".$msgs_str;
        }
    }

 

四:自定義驗證
 
注意:
1、自定義規則不能和內置規則重復
2、自定義規則中參數

 

protected $rule = [
        'user_name'     => 'require|length:6,20|checkName',
    ];
protected $message = [
        'user_name.require'     => '賬號不能為空',
        'user_name.length'      => '賬號長度需在6-20個字符之間',
    ];
 
/**
 * 自定義驗證規則
 * $value 表示輸入的值
 * $rule  驗證的規則 
 * $data 輸入的全部數據
 */
protected function checkName($value, $rule, $data=[])
{
    if ($value == 'yangphp') 
    {
       return true;
    }
    else
    {
        return "賬戶名錯誤";
    }
}

 

五、驗證場景

 驗證器:

//表示當edit場景,只驗證 user_name 和 user_mobile
protected $scene = [
        'edit'  =>  ['user_name','user_mobile'],
    ];  
控制器:

/**
 * 驗證2
 */
public function Validate2Act()
{
    $data = request()->param();

    try {
        $res = validate(User::class)->scene('edit')->check($data);

        return  "驗證通過了";
    } catch (ValidateException $e) {
        
        $msg = $e->getError();

        return json($msg);
    }
}
當設定 edit場景只驗證 user_name ,user_mobile 的格式。 user_truename,user_idcard 則不驗證

六、驗證規則

1、require   驗證某個字段必須
2、number  驗證某個字段的值是否是純數字
3、integer 驗證某個字段的值是否為整數
4、float     驗證某個字段的值是否為浮點數字
5、boolean  驗證某個字段的值是否為布爾值
6、email     驗證某個字段的值是否為email地址
7、array    驗證某個字段的值是否為數組
8、accepted    驗證某個字段是否為為 yes, on, 或是 1
9、date        驗證值是否為有效的日期
10、alpha    驗證某個字段的值是否為純字母
11、alphaNum 驗證某個字段的值是否為字母和數字
12、alphaDash    驗證某個字段的值是否為字母和數字,下划線_及破折號-
13、chs        驗證某個字段的值只能是漢字
14、chsAlpha 驗證某個字段的值只能是漢字、字母
15、chsAlphaNum  驗證某個字段的值只能是漢字、字母和數字
16、chsDash     驗證某個字段的值只能是漢字、字母、數字和下划線_及破折號
17、cntrl    驗證某個字段的值只能是控制字符(換行、縮進、空格)
18、graph    驗證某個字段的值只能是可打印字符(空格除外)
19、print    驗證某個字段的值只能是可打印字符(包括空格)
20、lower    驗證某個字段的值只能是小寫字符
21、upper    驗證某個字段的值只能是大寫字符
22、space    驗證某個字段的值只能是空白字符
23、xdigit    驗證某個字段的值只能是十六進制字符串
24、activeUrl    驗證某個字段的值是否為有效的域名或者IP
25、url        驗證某個字段的值是否為有效的URL地址
26、ip        驗證某個字段的值是否為有效的IP地址
27、dateFormat:format 驗證某個字段的值是否為指定格式的日期 例如:
    'create_time'=>'dateFormat:y-m-d'
28、mobile    驗證某個字段的值是否為有效的手機
29、idCard    驗證某個字段的值是否為有效的身份證格式
30、macAddr    驗證某個字段的值是否為有效的MAC地址
31、zip        驗證某個字段的值是否為有效的郵政編碼
32、in        驗證某個字段的值是否在某個范圍 例如:'num'=>'in:1,2,3'
33、notIn 驗證某個字段的值不在某個范圍
34、between 驗證某個字段的值是否在某個區間
35、notBetween 驗證某個字段的值不在某個范圍
36、length:num1,num2  驗證某個字段的值的長度是否在某個范圍
37、max:number    驗證某個字段的值的最大長度
38、min:number    驗證某個字段的值的最小長度
39、confirm        驗證某個字段是否和另外一個字段的值一致
    例如:'repassword'=>'require|confirm:password'
    自動匹配驗證規則:
    如password和password_confirm是自動相互驗證
    只需要使用 'password'=>'require|confirm'

 

七、表單令牌

 驗證規則支持對表單的令牌驗證:

 
HTML:
<input type="hidden" name="__token__" value="{:token()}" />
//也可以直接使用
{:token_field()}

控制器驗證規則:

$check = request()->checkToken('__token__');
if(false === $check) {
    return "token 驗證失敗";
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM