PHP code example of guirong / php-validate
1. Go to this page and download the library: Download guirong/php-validate library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
guirong / php-validate example snippets
[
['tagId,userId,name,email,freeTime', '
[
['field', '
use Guirong\Validate\Validation;
class SomeController
{
public function demoAction()
{
$v = Validation::check($_POST,[
// add rule
['title', 'min', 40],
['freeTime', 'number'],
]);
if ($v->isFail()) {
var_dump($v->getErrors());
var_dump($v->firstError());
}
// $postData = $v->all(); // 原始数据
$safeData = $v->getSafeData(); // 验证通过的安全数据
var_dump($safeData);
}
}
// 验证 POST 数据
$v = PageRequest::check($_POST);
// 验证失败
if ($v->isFail()) {
var_dump($v->getErrors());
var_dump($v->firstError());
}
// 验证成功 ...
$safeData = $v->getSafeData(); // 验证通过的安全数据
// $postData = $v->all(); // 原始数据
var_dump($safeData);
class DataModel
{
use \Guirong\Validate\ValidationTrait;
protected $data = [];
protected $db;
/**
* @param array $data
* @return $this
*/
public function load(array $data)
{
$this->data = $data;
return $this;
}
public function create()
{
if ($this->validate()->isFail()) {
return false;
}
return $this->db->insert($this->getSafeData());
}
}
// on model class
class UserModel extends DataModel
{
public function rules(): array
{
return [
['username, passwd', ' ['id', 'number', 'on' => 'update' ], // 仅作用于场景 update
['createdAt, updatedAt', 'safe'],
];
}
}
// on controller action ...
class UserController
{
// in action
// @api /user/add
public function addAction()
{
$model = new UserModel;
// 载入提交数据并设定场景为: create
$model->load($_POST)->atScene('create');
if (!$ret = $model->create()) {
exit($model->firstError());
}
echo "add success: userId = $ret";
}
}
use Guirong\Validate\FieldValidation;
class SomeController
{
public function demoAction()
{
$v = FieldValidation::check($_POST,[
// add rule
['title', 'string|min:20|max:60'],
['freeTime', 'number|min:10'],
]);
if ($v->isFail()) {
var_dump($v->getErrors());
var_dump($v->firstError());
}
// $postData = $v->all(); // 原始数据
$safeData = $v->getSafeData(); // 验证通过的安全数据
var_dump($safeData);
}
}
use Guirong\Validate\FieldValidation;
class PageRequest extends FieldValidation
{
public function rules(): array
{
return [
// 必填并且 4 <= tagId <=567
['tagId', ' '在验证前会先过滤转换为 int。并且仅会在指明场景名为 'scene1' 时规则有效
['userId', 'number', 'on' => 'scene1', 'filter' => 'int'],
['username', 'string|min:6', 'on' => 'scene2', 'filter' => 'trim'],
// 使用自定义正则表达式
['username', ' 定义不同场景需要验证的字段。
// 功能跟规则里的 'on' 类似,两者尽量不要同时使用,以免混淆。
public function scenarios(): array
{
return [
'create' => ['user', 'pwd', 'code'],
'update' => ['user', 'pwd'],
];
}
// 定义字段翻译
public function translates()
{
return [
'userId' => '用户Id',
];
}
// 自定义验证器的提示消息, 默认消息请看 {@see ErrorMessageTrait::$messages}
public function messages()
{
return [
'
// 验证 POST 数据
$v = PageRequest::check($_POST);
// 验证失败
if ($v->isFail()) {
var_dump($v->getErrors());
var_dump($v->firstError());
}
// 验证成功 ...
$safeData = $v->getSafeData(); // 验证通过的安全数据
// $postData = $v->all(); // 原始数据
var_dump($safeData);
$v = Validation::make($_POST,[
// add rule
['title', 'min', 40],
['freeTime', 'number'],
['title', 'checkTitle'],
])
->addValidator('checkTitle',function($title) { // 第一个参数是字段值。最后一个参数总是 $data
// some logic ...
return true; // 成功返回 True。验证失败,返回 False.
}, '{attr} default message!')
->validate();
['status', function($status) { // 第一个参数是字段值。最后一个参数总是 $data
if ($status > 3) {
return true;
}
return false;
}]
class AdemoValidator extends \Guirong\Validate\Validator\AbstractValidator
{
public function validate($value, $data): bool
{
if ($value == 1) {
return true;
}
return false;
}
}
// 使用
['status', new AdemoValidator()],
use Guirong\Validate\Validation;
class PageValidation extends Validation
{
# 进行验证前处理,返回false则停止验证,但没有错误信息,可以在逻辑中调用 addError 增加错误信息
public function beforeValidate(): bool
{
return true;
}
# 进行验证后处理,该干啥干啥
public function afterValidate(): bool
{
return true;
}
}
use Guirong\Validate\Validation;
$v = Validation::make(['name' => 'inhere'], [
['name', 'string', 'min' => 3, 'filter' => 'trim|upper']
]);
$v->onBeforeValidate(function (Validation $v) {
return true;
});
$v->onAfterValidate(function (Validation $v) {
});
$v->validate();
// a full rule
[
// basic validate setting
'field0,field1,...', 'validator', 'arg0', 'arg1', ...,
// some extended option settings
'skipOnEmpty' => 'bool',
'msg' => 'string|array',
'default' => 'mixed',
'on' => 'string|array'
'isEmpty' => 'callback(string|closure)',
'when' => 'callback(string|closure)',
'filter' => 'callback(string|array|closure)'
]
['page', 'number', 'default' => 1],
['pageSize', 'number', 'default' => 15],
['title', 'customValidator', 'msg' => '{attr} error msg!' ], // 指定当前规则的消息
// o, 可以是数组哦 :)
['tagId,title,userId,freeTime', '
// 在继承了 Validation 的子类 ValidationClass 中 ...
public function rules(): array
{
return [
['title', 'ate,update' ],
];
}
// ...
$valid = ValidationClass::make($_POST)->atScene('update')->validate();
// ...
// 在继承了 Validation 的子类中 ...
public function rules(): array
{
return [
['title', ' }],
];
}
['name', 'string']
['name', ''string' ]
['name', 'string', 'skipOnEmpty' => false ]
['name', 'string', 'isEmpty' => function($value) {
return true or false;
}]
['users.*.id', 'each', 'be verified
foreach ($value as $item) {
if ($item instanceof \Guirong\Validate\Exception\ArrayValueNotExists) {
return true;
}
// your code here ...
}]
['tagId,userId,freeTime', 'number', 'filter' => 'int'],
['field', 'validator', 'filter' => 'filter0|filter1...'],
// 需要自定义性更高时,可以使用数组。
['field1', 'validator', 'filter' => [
'string',
'trim',
['Class', 'method'],
['Object', 'method'],
// 追加额外参数。 传入时,第一个参数总是要过滤的字段值,其余的依次追加
'myFilter' => ['arg1', 'arg2'],
// 直接使用闭包
function($val) {
return str_replace(' ', '', $val);
},
]],
// 在继承了 Validation 的子类 ValidationClass 中 ...
// 定义不同场景需要验证的字段。
// 功能跟规则里的 'on' 类似,两者尽量不要同时使用,以免混淆。
public function scenarios(): array
{
return [
'create' => ['user', 'pwd', 'code'],
'update' => ['user', 'pwd'],
];
}
// 在继承了 Validation 的子类 ValidationClass 中 ...
public function rules(): array
{
return [
['title', 'ate,update' ],
];
}
$v->setSecne('update')->validate();
$v->setStopOnError(false);
$v->setSkipOnEmpty(false);
['createdAt, updatedAt', 'safe']
$v = Validation::make($_POST, [
// [...],
// some rules ...
])
->setUploadedFiles($_FILES)
->validate();
// ...
[
'goods' => [
'apple' => 34,
'pear' => 50,
],
]
['goods.pear', 'max', 30], //goods 下的 pear 值最大不能超过 30
[
'goods' => [
'apple' => 34,
'pear' => 50,
],
'users' => [
['id' => 34, 'name' => 'tom'],
['id' => 89, 'name' => 'john'],
]
]
['goods.*', 'each', 'number'], //goods 下的 每个值 都必须为大于0 的整数
// 写法是等效的
// ['goods', 'each', 'number'], //goods 下的 每个值 都必须为大于0 的整数
// 多维数组
['users.*.id', 'each', '
public function setScene(string $scene)
public function atScene(string $scene) // setScene 的别名方法
public function validate(array $onlyChecked = [], $stopOnError = null)
public function addValidator(string $name, \Closure $callback, string $msg = '')
public function getErrors(): array
[
['name' => 'field1', 'msg' => 'error Message1' ],
['name' => 'field2', 'msg' => 'error Message2' ],
...
]
public function firstError($onlyMsg = true)
public function lastError($onlyMsg = true)
public function getSafeData(): array|\stdClass
public function val(string $key, $default = null) // getSafe() 的别名方法
public function getValid(string $key, $default = null) // getSafe() 的别名方法
public function getSafe(string $key, $default = null)
public function all(): array
public function getRaw(string $key, $default = null)
bash
composer ser
// 验证失败
public function isFail()
public function hasError() // isFail() 的别名方法
// 成功通过验证
public function isOk()
public function isPassed()