Skip to content

Commit 2394fe2

Browse files
committed
update readme.md, add more validate method
1 parent 8bc4f97 commit 2394fe2

File tree

6 files changed

+693
-271
lines changed

6 files changed

+693
-271
lines changed

README.md

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55
> 规则设置参考自 yii 的。
66
7+
## 项目地址
8+
9+
- **git@osc** https://git.oschina.net/inhere/php-validate.git
10+
- **github** https://github.com/inhere/php-validate.git
11+
712
## 安装
813

914
- 使用 composer
@@ -43,17 +48,15 @@ git clone https://github.com/inhere/php-validate.git // github
4348
return [
4449
['tagId,title,userId,freeTime', 'required', 'msg' => '{attr} is required!'],
4550
['tagId', 'size', 'min'=>4, 'max'=>567], // 4<= tagId <=567
46-
['title', 'min', 'min' => 40],
51+
['title', 'min', 40],
4752
['freeTime', 'number'],
4853
['tagId', 'number', 'when' => function($data) {
4954
return isset($data['status']) && $data['status'] > 2;
5055
}],
5156
['userId', 'number', 'on' => 'scene1' ],
5257
['username', 'string', 'on' => 'scene2' ],
5358
['title', 'customValidator', 'msg' => '{attr} error msg!' ],
54-
['status', function($status)
55-
{
56-
59+
['status', function($status) {
5760
if ($status > 3) {
5861
return true;
5962
}
@@ -122,7 +125,7 @@ $db->save($safeData);
122125
{
123126
$valid = Validation::make($_POST,[
124127
// add rule
125-
['title', 'min', 'min' => 40],
128+
['title', 'min', 40],
126129
['freeTime', 'number'],
127130
])->validate();
128131

@@ -201,7 +204,7 @@ $db->save($safeData);
201204
public function addAction()
202205
{
203206
$model = new UserModel;
204-
$ret = $model->setData($_POST)->create();
207+
$ret = $model->setData($_POST)->atScene('create')->create();
205208

206209
if (!$ret) {
207210
exit($model->firstError());
@@ -223,7 +226,7 @@ $db->save($safeData);
223226

224227
$valid = Validation::make($_POST,[
225228
// add rule
226-
['title', 'min', 'min' => 40],
229+
['title', 'min', 40],
227230
['freeTime', 'number'],
228231
['title', 'checkTitle'],
229232
])
@@ -331,12 +334,12 @@ $valid = Validation::make($_POST,[
331334

332335
### `isEmpty` -- 是否为空判断
333336

334-
是否为空判断, 这个判断作为 `skipOnEmpty` 的依据. 默认使用 `empty($data[$attr])` 来判断.
337+
是否为空判断, 这个判断作为 `skipOnEmpty` 的依据. 默认使用 `ValidatorList::isEmpty` 来判断.
335338

336339
你也可以自定义判断规则:
337340

338341
```php
339-
['name', 'string', 'isEmpty' => function($data, $attr) {
342+
['name', 'string', 'isEmpty' => function($value) {
340343
return true or false;
341344
}]
342345
```
@@ -365,12 +368,11 @@ public function atScene(string $scene) // setScene 的别名方法
365368
### 进行数据验证
366369

367370
```php
368-
public function validate(array $onlyChecked = [], $stopOnError = null)
371+
public function validate($stopOnError = null)
369372
```
370373

371374
进行数据验证。 返回验证器对象,然后就可以获取验证结果等信息。
372375

373-
- `$onlyChecked` 可以设置此次需要验证的字段
374376
- `$stopOnError` 是否当出现一个验证失败就立即停止。 默认是 `true`
375377

376378
### 添加自定义的验证器
@@ -472,24 +474,32 @@ public function get(string $key, $default = null)
472474
验证器 | 说明 | 规则示例
473475
----------|-------------|------------
474476
`int` | 验证是否是 int | `['userId', 'int']`
475-
`number` | 验证是否是 number | `['userId', 'number']`
477+
`number/num` | 验证是否是 number | `['userId', 'number']`
476478
`bool` | 验证是否是 bool | `['open', 'bool']`
477479
`float` | 验证是否是 float | `['price', 'float']`
478480
`string` | 验证是否是 string. 支持长度检查 | `['name', 'string']`, `['name', 'string', 'min'=>4, 'max'=>16]`
479-
`isArray` | 验证是否是数组 | ....
480-
`regexp` | 使用正则进行验证 | ....
481+
`alpha` | 验证值是否仅包含字母字符 | `['name', 'alpha']`
482+
`alphaNum` | 验证是否仅包含字母、数字 | `['field', 'alphaNum']`
483+
`alphaDash` | 验证是否仅包含字母、数字、破折号( - )以及下划线( _ ) | `['field', 'alphaDash']`
484+
`isArray` | 验证是否是json字符串 | `['goods', 'isArray']`
485+
`json` | 验证是否是数组 | `['goods', 'json']`
481486
`url` | 验证是否是 url | `['myUrl', 'url']`
482487
`email` | 验证是否是 email | `['userEmail', 'email']`
483-
`ip` | 验证是否是 ip | `['ipAddr', 'ip']`
488+
`date` | 验证是否是 date | `['published_at', 'date']`
489+
`dateFormat` | 验证是否是 date, 并且是指定的格式 | `['published_at', 'dateFormat', 'Y-m-d']`
490+
`ip` | 验证是否是 IP | `['ipAddr', 'ip']`
491+
`ipv4` | 验证是否是 IPv4 | `['ipAddr', 'ipv4']`
492+
`ipv6` | 验证是否是 IPv6 | `['ipAddr', 'ipv6']`
484493
`required` | 要求此字段/属性是必须的 | `['tagId, userId', 'required' ]`
485494
`size` | 验证大小范围, 可以支持验证 `int`, `string`, `array` 数据类型 | `['tagId', 'size', 'min'=>4, 'max'=>567]` `['name', 'size', 'max' => 16]`
486495
`range` | `size` 验证的别名 | 跟 `size` 一样
487496
`length` | 长度验证( 跟 `size`差不多, 但只能验证 `string`, `array` 的长度 | ....
488-
`min` | 最小边界值验证 | `['title', 'min', 'value' => 40]`
489-
`max` | 最大边界值验证 | `['title', 'max', 'value' => 40]`
490-
`in` | 枚举验证 | `['id', 'in', 'value' => [1,2,3]`
491-
`compare` | 字段值比较 | `['passwd', 'compare', 'repasswd']`
492-
`callback` | 自定义回调验证 | ....
497+
`min` | 最小边界值验证 | `['title', 'min', 40]`
498+
`max` | 最大边界值验证 | `['title', 'max', 40]`
499+
`in` | 枚举验证 | `['status', 'in', [1,2,3]`
500+
`notIn` | 枚举验证 | `['status', 'notIn', [1,2,3]`
501+
`compare/same` | 字段值比较 | `['passwd', 'compare', 'repasswd']`
502+
`regexp` | 使用正则进行验证 | `['name', 'regexp', '/^\w+$/']`
493503

494504
- 关于布尔值验证
495505
* 如果是 "1"、"true"、"on" 和 "yes",则返回 TRUE

examples/index.php

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,34 @@
1616

1717
$data = [
1818
// 'userId' => 234,
19-
'userId' => 'sdfdffffffffff',
19+
'userId' => 'is not an integer',
2020
'tagId' => '234535',
21-
// 'freeTime' => 'sdfdffffffffff',
22-
'distanceRequire' => 'sdfdffffffffff',
21+
// 'freeTime' => '1456767657', // filed not exists
2322
'note' => '',
2423
'name' => 'john',
24+
'existsField' => 'test',
2525
'passwd' => 'password',
2626
'repasswd' => 'repassword',
2727
'insertTime' => '1456767657',
28-
'lastReadTime' => '1456767657',
28+
'goods' => [
29+
'apple' => 34,
30+
'pear' => 50,
31+
],
2932
];
3033

3134
$rules = [
3235
['tagId,userId,freeTime', 'required', 'msg' => '{attr} is required!'],// set message
3336
['tagId,userId,freeTime', 'number'],
3437
['note', 'email', 'skipOnEmpty' => false], // set skipOnEmpty is false.
3538
['insertTime', 'email', 'scene' => 'otherScene' ],// set scene. will is not validate it on default.
36-
['tagId', 'size', 'max'=>567, 'min'=>4, ], // 4<= tagId <=567
39+
['tagId', 'size', 'max'=> 567, 'min'=> 4, ], // 4<= tagId <=567
3740
['passwd', 'compare', 'repasswd'], //
3841

42+
['goods.pear', 'max', 30], //
43+
44+
// ['notExistsField1', 'requiredWithout', 'notExistsField2'], //
45+
['notExistsField1', 'requiredWithout', 'existsField'], //
46+
3947
['freeTime', 'size', 'min'=>4, 'max'=>567, 'when' => function($data, $valid) {
4048
echo " use when pre-check\n";
4149

@@ -45,36 +53,35 @@
4553
}], // 4<= tagId <=567
4654

4755
['userId', function($value, $data){
48-
echo " use custom validate\n";
49-
50-
var_dump($value, $data);
56+
echo " use custom validate to check userId \n";
5157

52-
echo __LINE__ . "\n";
58+
// var_dump($value, $data);
59+
// echo __LINE__ . "\n";
5360

5461
return false;
55-
}, 'msg' => 'userId check failure!'],
62+
}, 'msg' => 'userId check failure by closure!'],
5663
];
5764

58-
echo "use ValidationTrait\n";
65+
echo "\n----------------------------\n raw data, waiting to validate\n----------------------------\n\n";
66+
67+
print_r($data);
68+
69+
echo "\n----------------------------\n use ValidationTrait\n----------------------------\n\n";
5970

6071
//$model = new DataModel($_POST,$rules);
6172
$model = new DataModel;
6273
$model->setData($data)->setRules($rules);
6374
$model->validate();
6475

65-
var_dump(
66-
$model->all(),
67-
$model->getErrors()
68-
);
69-
76+
print_r($model->getErrors());
7077

71-
echo "--------------\n";
72-
echo "use Validation\n";
78+
echo "\n----------------------------\n use Validation\n----------------------------\n\n";
7379

74-
$valid = \inhere\validate\Validation::make($data, $rules)->validate([], false);
80+
$valid = \inhere\validate\Validation::make($data, $rules)
81+
->setAttrTrans([
82+
'goods.pear' => '梨子'
83+
])
84+
->validate([], false);
7585

76-
var_dump(
77-
$valid->all(),
78-
$valid->getErrors()
79-
);
86+
print_r($valid->getErrors());
8087

src/Helper.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,39 @@ public static function toUnderscoreCase($string, $sep='_')
165165
return self::strtolower(trim(preg_replace('/([A-Z][a-z])/', $sep . '$1', $string), $sep));
166166
}
167167

168+
/**
169+
* getValueOfArray 支持以 '.' 分割进行子级值获取 eg: 'goods.apple'
170+
* @param array $data
171+
* @param array|string $key
172+
* @return mixed
173+
*/
174+
public static function getValueOfArray(array $data, $key, $default = null)
175+
{
176+
if (!$key) {
177+
return $data;
178+
}
179+
180+
if (is_string($key)) {
181+
$nodes = strpos(trim($key, '. '), '.') ? explode('.', $key) : [$key];
182+
} else {
183+
$nodes = (array)$key;
184+
}
185+
186+
$temp = $data;
187+
188+
foreach ($nodes as $name) {
189+
if (isset($temp[$name])) {
190+
$temp = $temp[$name];
191+
} else {
192+
$temp = $default;
193+
break;
194+
}
195+
}
196+
197+
unset($data);
198+
return $temp;
199+
}
200+
168201
/**
169202
* 使用正则验证数据
170203
* @access public

0 commit comments

Comments
 (0)