webman工具類(插件配置,TP驗證工具)

插件安裝
基于webman的工具:安裝
composer安裝組件命令如下:請在項目根目錄下執(zhí)行:
composer require wekyun/webman_lib
現(xiàn)在建議使用新版本:兼容PHP >= 7.2~php8.x
用法不變,是基于TP8的驗證器修改,并且自帶基礎默認規(guī)則,做了優(yōu)化
https://gitee.com/wekyun/webman_tool#webman_tool
composer鏡像切換
阿里云
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
華為云
composer config -g repo.packagist composer https://mirrors.huaweicloud.com/repository/php/
騰訊云
composer config -g repos.packagist composer https://mirrors.cloud.tencent.com/composer/
phpcomposer Composer官方鏡像(速度慢)
composer config -g repo.packagist composer https://packagist.phpcomposer.com
Packagist 中國全量鏡像(由安暢網(wǎng)絡贊助)
composer config -g repo.packagist composer https://php.cnpkg.org
Packagist / JP 日本鏡像(一個日本開發(fā)者搭建的鏡像)
composer config -g repo.packagist composer https://packagist.jp/
Packagist Mirror 上海交通大學鏡像
composer config -g repo.packagist composer https://packagist.mirrors.sjtug.sjtu.edu.cn/
Packagist 清華大學鏡像
composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
github代碼地址:希望大家給個星星鼓勵一下!
https://github.com/wekyun/webman_lib
更新說明:
插件更新:
v2.2:新增Token類和tool類
v2.0:
新增Req類,可以依賴注入使用,
$param = $request->setField('field')->checkAll('com', ['username.>請輸入賬號', 'password.>請輸入密碼', 'image_code.>請?zhí)顚戲炞C碼']);
v1.9更新:修改成自動加載webman各個插件自己的驗證配置使用,官方的驗證配置和各個的插件的配置隔離互不影響
1:插件配置保存功能
定義或者修改文件配置使用演示
工具是基于xiunobbs的文件配置修改,修改前備份,修改成功刪除備份,修改失敗回復備份。
因為webman是常駐內(nèi)存的框架,運行了修改配置的代碼,需要重啟服務,否則修改配置不會生效。
include './vendor/autoload.php';
$your_config_data = [
'title' => 'my_plugin_config',
'name' => 'web',
];
//第一個參數(shù):$your_config_data 需要修改或者新增定義的配置數(shù)據(jù)
//第二個參數(shù):你的插件名字,必須是你的插件名字
//第三個參數(shù):你插件的配置文件名,不需要.php結尾
\Wekyun\WebmanLib\WekConfig::setPluginConfigValue($your_config_data, 'demo', 'aliDianBoConfig');
2:插件參數(shù)驗證功能(快速接收參數(shù)驗證):tp驗證依賴不支持8.0以上
基于\think\Validate的驗證插件
使用此插件需要安裝TP的驗證器:composer require topthink/think-validate
除了要跟TP一樣定義規(guī)則文件外,還需要在配置目錄下創(chuàng)建check.php配置文件,具體參考下面的使用前配置。
TP驗證器文檔:https://www.kancloud.cn/manual/thinkphp5_1/354102
項目開發(fā)中,除了數(shù)據(jù)庫操作以外,最常寫的代碼便是參數(shù)接收和數(shù)據(jù)校驗了。
很多程序員可能就簡單的接受了參數(shù),并不會去驗證數(shù)據(jù),或者有些程序員只是簡單的if去判斷一下,但是有時候有些字段必須要驗證,字段多了驗證數(shù)據(jù)就寫了很多的代碼,即便是使用\think\Validate的驗證器,也需要去麻煩一下。
作者跟你們一樣懶,但是又想讓項目的數(shù)據(jù)驗證規(guī)范起來,從最初的驗證層,到現(xiàn)在一個插件就搞定,這期間有一個代碼進化的過程。
現(xiàn)在把功能封裝成了插件貢獻大家使用,也希望各位在數(shù)據(jù)校驗這方面使用起來又簡單又方便。
參數(shù)接收
//需要先引入插件
use Wekyun\WebmanLib\Check;
//基礎使用:$param就是接收的參數(shù)
$param = Check::checkAll('com', ['name', 'age', 'sex']);
var_dump($param);
這里來解釋一下兩個參數(shù),第一個參數(shù)是com,第二個參數(shù)是一個數(shù)組
第一個參數(shù)com
這個參數(shù)是配置文件check.php中定義的,對應mapping的com別名。此文件需要在使用之前配置,如何配置看下面的使用前的配置,com是告訴插件,要使用哪個TP驗證規(guī)則文件的規(guī)則,你可以定義其他的規(guī)則文件,并在配置mapping中注冊別名。
'mapping' => [
'com' => \app\common\validate\Common::class,
],
第二個參數(shù)數(shù)組
這第二個參數(shù)就是你要接收的參數(shù)字段了,如代碼這樣定義,就可以接受參數(shù),但是如果客戶端發(fā)送了沒有接收的參數(shù),也會被接收,如果想要接收自己指定的參數(shù)可以這么寫:
$param = Check::checkOnlyAll('com', ['name', 'age', 'sex']);
var_dump($param);
checkOnlyAll方法的意思就是驗證接收指定的字段,沒有指定的字段是不會接收的。
參數(shù)驗證與默認值
字段必傳(.)
必傳驗證很簡單,name.
寫法就是驗證name傳遞參數(shù)是否有值,0,null,false,都算是值,只有空字符串不算傳遞了參數(shù)。
Check::checkAll('com', ['name.', 'age', 'sex']);
默認值(:)
age:18
就是給了參數(shù)默認值,如果接受的參數(shù)這個字段沒有值或者沒傳,就會給指派的默認值。
需要注意的是,默認值和必傳不要同時寫
Check::checkAll('com', ['name.', 'age:18', 'sex']);
錯誤提示的字段別名(|)
name|用戶名
就是給字段name自定義了錯誤提示時的別名,如果字段name沒有傳遞,或者不符合驗證規(guī)則,就會提示用戶名
怎么樣,如果不設置別名,就會提示name
怎么樣。
使用時需要注意,|必須跟在字段name面,在必傳.的前面,否則無法正常使用。
Check::checkAll('com', ['name|用戶名.', 'age:18', 'sex']);
自定義完整必傳錯誤提示(>)
必傳字段name沒有傳遞,就會提示 請輸入用戶名
,這在用戶端提交表單的時候,驗證必傳字段十分有效。
需要注意的是,自定義的提示信息優(yōu)先級不會大于TP的驗證錯誤提示,也就是說,如果在驗證規(guī)則文件中,設置了字段的其他錯誤驗證規(guī)則和驗證錯誤提示,那么驗證規(guī)則的驗證提示是優(yōu)先級最高的。
Check::checkAll('com', ['name.>請輸入用戶名', 'age:18', 'sex']);
使用規(guī)則總結
.
必傳
>
自定義必傳提示,常用戶前端字段友好提示
|
自定義字段錯誤提示的別名
:
設置默認值,此標識符和必傳字段的 .
不可以同時使用,有沖突
在字段特別多的時候,驗證后寫字段的必傳時,這個插件非常香。
使用前的配置
需要在項目config目錄下創(chuàng)建一個check.php配置文件
├── app 應用目錄
├── config 配置目錄
│ ├── check.php check配置文件
├── public 靜態(tài)資源目錄
├── process 自定義進程目錄
├── runtime 應用的運行時目錄,需要可寫權限
├── start.php 服務啟動文件
├── vendor composer安裝的第三方類庫目錄
└── support 類庫適配(包括第三方類庫)
在配置文件check.php中復制如下配置代碼:
<?php
//配置文件名要改成 check.php 放在webman項目的根目錄的config的根目錄下
return [
//自定義錯誤的處理方法 $msg:錯誤提示 $err_code:錯誤碼
// 'err_func' => function ($msg, $err_code) {
// },
'err_code' => 203,//默認錯誤的錯誤碼
//此配置為必須,配置需要使用的驗證場景類,需要按照目錄創(chuàng)建文件寫法參考TP的驗證器文檔
'mapping' => [
'com' => \app\common\validate\Common::class,
],
];
然后需要創(chuàng)建tp驗證器的驗證規(guī)則文件,在 app\common\validate
目錄下創(chuàng)建 Common.php
文件,代碼如下:
需要注意的是:tp驗證規(guī)則文件,必須在上一步的 check.php
配置文件的 mapping
中配置文件地址才能使用,\app\common\validate\Common::class
的意思就是TP配置文件的命名空間地址,可以打印看下是什么就明白了。
<?php
//驗證起規(guī)則文件
namespace app\common\validate;
use think\Validate;
//驗證起規(guī)則文件demo,至少要定義,才能用插件
class Common extends Validate
{
//書寫你驗證的字段,或者重新定義驗證類文件,并在check配置中的 mapping 定義驗證文件路徑
protected $rule = [
'id_card' => 'idCard',//驗證某個字段的值是否為有效的身份證格式
'mobile' => 'mobile',//驗證某個字段的值是否為有效的手機
'name' => ['max' => 25, 'regex' => '/^[\w|\d]\w+/'],
'email' => 'email',
'age' => 'number|between:1,120',//驗證某個字段的值是否在某個區(qū)間
'info' => 'array',//驗證某個字段的值是否為數(shù)組
'accept' => 'accepted',//驗證某個字段是否為為 yes, on, 或是 1。這在確認"服務條款"是否同意時很有用
//支持正則驗證
//'zip'=>'\d{6}',
];
protected $message = [
];
}
另外插件的錯誤提示要接管框架的錯誤處理,根據(jù)自己的業(yè)務給前端提示錯誤
全局錯誤處理請參考http://www.wtbis.cn/a/1529
至此就可以使用了!
新增Token類:
//Token::init 設置公鑰密鑰,長度要保持一致,否則多項目,其他語言無法解析
Token::init('d5vp782flPgdktyFG76oH99OMKJe8245', '8NONw5a9P33ysWpM');
$token_str = Token::make(['name' => 'wekyun', 'uid' => 1], 30);
$token_array_data = Token::read($token_str);
if (!$token_array_data) {
//TODO 登錄已過期,或者token無效,需要重新登錄
}
var_dump($token_array_data);