国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

?? 我的第二個(gè)webman插件webman/validate 驗(yàn)證插件

Tinywan

Webman Validate 插件

Total Downloads
Latest Stable Version

聲明:由于官方的 think-validate驗(yàn)證器 不兼容 PHP8.0。所以這里重復(fù)造輪子

基于PHP7.4 + 的Validate實(shí)現(xiàn)?;赥hinkPHP6修改的可用于 webman 的通用validate數(shù)據(jù)驗(yàn)證器。

項(xiàng)目地址:https://github.com/Tinywan/casbin

安裝

composer require tinywan/validate

基本用法

<?php
namespace app\index\validate;

use Tinywan\Validate\Validate;

class UserValidate extends Validate
{
    protected $rule =   [
        'name'  => 'require|max:25',
        'age'   => 'require|number|between:1,120',
        'email' => 'require|email'
    ];

    protected $message  =   [
        'name.require' => '名稱必須',
        'name.max'     => '名稱最多不能超過(guò)25個(gè)字符',
        'age.require'   => '年齡必須是數(shù)字',
        'age.number'   => '年齡必須是數(shù)字',
        'age.between'  => '年齡只能在1-120之間',
        'email.require'        => '郵箱必須是數(shù)字',
        'email.email'        => '郵箱格式錯(cuò)誤'
    ];
}

驗(yàn)證器調(diào)用代碼如下:

$data = [
    'name'  => 'Tinywan',
    'age'  => 24,
    'email' => 'Tinywan@163.com'
];
$validate = new \app\index\validate\UserValidate;

if (!$validate->check($data)) {
    var_dump($validate->getError());
}

助手函數(shù)(推薦)

自定義函數(shù) functions.php 添加validate()函數(shù)

/**
 * @desc 驗(yàn)證器助手函數(shù)
 * @param array $data 數(shù)據(jù)
 * @param string|array $validate 驗(yàn)證器類名或者驗(yàn)證規(guī)則數(shù)組
 * @param array $message 錯(cuò)誤提示信息
 * @param bool $batch 是否批量驗(yàn)證
 * @param bool $failException 是否拋出異常
 * @return bool
 * @author Tinywan(ShaoBo Wan)
 */
function validate(array $data, $validate = '', array $message = [], bool $batch = false, bool $failException = true)
{
    if (is_array($validate)) {
        $v = new \Tinywan\Validate\Validate();
        $v->rule($validate);
    } else {
        if (strpos($validate, '.')) {
            [$validate, $scene] = explode('.', $validate);
        }
        $class = false !== strpos($validate, '\\') ? $validate : $validate;
        $v = new $class();
        if (!empty($scene)) {
            $v->scene($scene);
        }
    }
    return $v->message($message)->batch($batch)->failException($failException)->check($data);
}

驗(yàn)證器調(diào)用代碼如下:

$data = [
    'name'  => 'Tinywan',
    'age'  => 24,
    'email' => 'Tinywan@163.com'
];
validate($data, \app\index\validate\UserValidate::class . '.issue');

驗(yàn)證錯(cuò)誤會(huì)自動(dòng)拋出異常

更多用法可以參考6.0完全開(kāi)發(fā)手冊(cè)的驗(yàn)證章節(jié)

3394 5 2
5個(gè)評(píng)論

864328615

unique唯一驗(yàn)證報(bào)錯(cuò) Tinywan\Validate\Validate::unique(): Argument #2 ($data) must be of type array, string given

  • Tinywan 2022-02-26

    不推薦使用這個(gè)驗(yàn)證唯一性!為啥?不安全,這個(gè)唯一驗(yàn)證是是直接調(diào)用數(shù)據(jù)庫(kù)查詢的

  • 864328615 2022-02-26

    還有別的方式嗎 大佬

  • 864328615 2022-02-26

    大佬你這個(gè)插件有點(diǎn)讓人誤解了是嗎,我安裝了think-validate 對(duì)php8是支持的啊

  • Tinywan 2022-02-26

    那你用think-validate就可以啦!

  • yzh52521 2022-02-28

    @864328615 自己實(shí)現(xiàn)一下 就行了

    public function unique($value, $rule, array $data = [], string $field = ''): bool
        {
            if (is_string($rule)) {
                $rule = explode(',', $rule);
            }
    
            if (false !== strpos($rule[0], '\\')) {
                // 指定模型類
                $db = new $rule[0];
            } else {
                // 指定模型類
                $className = "\\app\\model\\" . ucfirst($rule[0]);
                $db        = new $className;
            }
    
            $key = $rule[1] ?? $field;
            $map = [];
    
            if (strpos($key, '^')) {
                // 支持多個(gè)字段驗(yàn)證
                $fields = explode('^', $key);
                foreach ($fields as $key) {
                    if (isset($data[$key])) {
                        $map[] = [$key, '=', $data[$key]];
                    }
                }
            } elseif (isset($data[$field])) {
                $map[] = [$key, '=', $data[$field]];
            }
            $pk = !empty($rule[3]) ? $rule[3] : $db->getPk();
    
            if (is_string($pk)) {
                if (isset($rule[2])) {
                    $map[] = [$pk, '<>', $rule[2]];
                } elseif (isset($data[$pk])) {
                    $map[] = [$pk, '<>', $data[$pk]];
                }
            }
    
            if ($db->where($map)->field($pk)->find()) {
                return false;
            }
    
            return true;
        }
1619443919

php73的用起來(lái)有啥問(wèn)題不

864328615

現(xiàn)在的版本是不是支持了unique啊

TM

挺好用 感謝大佬

  • TM 2023-11-22

    剛更新php版本就遇到了tp驗(yàn)證器問(wèn)題,剛好在社區(qū)找到大佬插件

  • Tinywan 2023-11-22

    哈哈!那就好

Leon

大佬,語(yǔ)言支持嘛?
我想在語(yǔ)言包里直接翻譯過(guò)來(lái)但是不觸發(fā)多語(yǔ)言呢

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表評(píng)論

Tinywan

13380
積分
0
獲贊數(shù)
0
粉絲數(shù)
2020-01-14 加入
??