@@ -24,6 +24,9 @@ trait UserAndContextValidatorsTrait
2424 */
2525 protected static $ _validators = [];
2626
27+ /** @var string */
28+ protected static $ _fileValidators = '|file|image|mimeTypes|mimes| ' ;
29+
2730 /**
2831 * @see $_FILES
2932 * @var array[]
@@ -74,7 +77,7 @@ public static function setValidator(string $name, callable $callback, string $ms
7477 * @param string $name
7578 * @return null|callable
7679 */
77- public static function getValidator ($ name )
80+ public static function getValidator (string $ name )
7881 {
7982 if (isset (self ::$ _validators [$ name ])) {
8083 return self ::$ _validators [$ name ];
@@ -87,7 +90,7 @@ public static function getValidator($name)
8790 * @param string $name
8891 * @return bool|callable
8992 */
90- public static function delValidator ($ name )
93+ public static function delValidator (string $ name )
9194 {
9295 $ cb = false ;
9396
@@ -135,7 +138,7 @@ public static function getValidators(): array
135138 * @param null|mixed $value
136139 * @return bool
137140 */
138- public function required ($ field , $ value = null )
141+ public function required (string $ field , $ value = null )
139142 {
140143 if (null !== $ value ) {
141144 $ val = $ value ;
@@ -160,7 +163,7 @@ public function required($field, $value = null)
160163 * @param array|string $values
161164 * @return bool
162165 */
163- public function requiredIf ($ field , $ fieldVal , $ anotherField , $ values )
166+ public function requiredIf (string $ field , $ fieldVal , $ anotherField , $ values )
164167 {
165168 if (!isset ($ this ->data [$ anotherField ])) {
166169 return false ;
@@ -184,7 +187,7 @@ public function requiredIf($field, $fieldVal, $anotherField, $values)
184187 * @param array|string $values
185188 * @return bool
186189 */
187- public function requiredUnless ($ field , $ fieldVal , $ anotherField , $ values )
190+ public function requiredUnless (string $ field , $ fieldVal , $ anotherField , $ values )
188191 {
189192 if (!isset ($ this ->data [$ anotherField ])) {
190193 return false ;
@@ -205,7 +208,7 @@ public function requiredUnless($field, $fieldVal, $anotherField, $values)
205208 * @param array|string $fields
206209 * @return bool
207210 */
208- public function requiredWith ($ field , $ fieldVal , $ fields )
211+ public function requiredWith (string $ field , $ fieldVal , $ fields )
209212 {
210213 foreach ((array )$ fields as $ name ) {
211214 if ($ this ->required ($ name )) {
@@ -224,7 +227,7 @@ public function requiredWith($field, $fieldVal, $fields)
224227 * @param array|string $fields
225228 * @return bool
226229 */
227- public function requiredWithAll ($ field , $ fieldVal , $ fields )
230+ public function requiredWithAll (string $ field , $ fieldVal , $ fields )
228231 {
229232 $ allHasValue = true ;
230233
@@ -246,7 +249,7 @@ public function requiredWithAll($field, $fieldVal, $fields)
246249 * @param array|string $fields
247250 * @return bool
248251 */
249- public function requiredWithout ($ field , $ fieldVal , $ fields )
252+ public function requiredWithout (string $ field , $ fieldVal , $ fields )
250253 {
251254 $ allHasValue = true ;
252255
@@ -268,7 +271,7 @@ public function requiredWithout($field, $fieldVal, $fields)
268271 * @param array|string $fields
269272 * @return bool
270273 */
271- public function requiredWithoutAll ($ field , $ fieldVal , $ fields )
274+ public function requiredWithoutAll (string $ field , $ fieldVal , $ fields )
272275 {
273276 $ allNoValue = true ;
274277
@@ -288,7 +291,7 @@ public function requiredWithoutAll($field, $fieldVal, $fields)
288291 * @param string|array $suffixes e.g ['jpg', 'jpeg', 'png', 'gif', 'bmp']
289292 * @return bool
290293 */
291- public function fileValidator ($ field , $ suffixes = null )
294+ public function fileValidator (string $ field , $ suffixes = null )
292295 {
293296 if (!$ file = $ this ->uploadedFiles [$ field ] ?? null ) {
294297 return false ;
@@ -320,7 +323,7 @@ public function fileValidator($field, $suffixes = null)
320323 * @param string|array $suffixes e.g ['jpg', 'jpeg', 'png', 'gif', 'bmp']
321324 * @return bool
322325 */
323- public function imageValidator ($ field , $ suffixes = null )
326+ public function imageValidator (string $ field , $ suffixes = null )
324327 {
325328 if (!$ file = $ this ->uploadedFiles [$ field ] ?? null ) {
326329 return false ;
@@ -367,7 +370,7 @@ public function imageValidator($field, $suffixes = null)
367370 * @param string|array $types
368371 * @return bool
369372 */
370- public function mimeTypesValidator ($ field , $ types )
373+ public function mimeTypesValidator (string $ field , $ types )
371374 {
372375 if (!$ file = $ this ->uploadedFiles [$ field ] ?? null ) {
373376 return false ;
@@ -395,7 +398,7 @@ public function mimeTypesValidator($field, $types)
395398 * @param string|array $types
396399 * return bool
397400 */
398- public function mimesValidator ($ field , $ types = null )
401+ public function mimesValidator (string $ field , $ types = null )
399402 {
400403 }
401404
@@ -409,17 +412,17 @@ public function mimesValidator($field, $types = null)
409412 * @param string $compareField
410413 * @return bool
411414 */
412- public function compareValidator ($ val , $ compareField )
415+ public function compareValidator ($ val , string $ compareField )
413416 {
414417 return $ compareField && ($ val === $ this ->getByPath ($ compareField ));
415418 }
416419
417- public function sameValidator ($ val , $ compareField )
420+ public function sameValidator ($ val , string $ compareField )
418421 {
419422 return $ this ->compareValidator ($ val , $ compareField );
420423 }
421424
422- public function equalValidator ($ val , $ compareField )
425+ public function equalValidator ($ val , string $ compareField )
423426 {
424427 return $ this ->compareValidator ($ val , $ compareField );
425428 }
@@ -430,7 +433,7 @@ public function equalValidator($val, $compareField)
430433 * @param string $compareField
431434 * @return bool
432435 */
433- public function notEqualValidator ($ val , $ compareField )
436+ public function notEqualValidator ($ val , string $ compareField )
434437 {
435438 return $ compareField && ($ val !== $ this ->getByPath ($ compareField ));
436439 }
@@ -441,7 +444,7 @@ public function notEqualValidator($val, $compareField)
441444 * @param string $compareField
442445 * @return bool
443446 */
444- public function differentValidator ($ val , $ compareField )
447+ public function differentValidator ($ val , string $ compareField )
445448 {
446449 return $ compareField && ($ val !== $ this ->getByPath ($ compareField ));
447450 }
@@ -452,7 +455,7 @@ public function differentValidator($val, $compareField)
452455 * @param string $anotherField
453456 * @return bool
454457 */
455- public function inFieldValidator ($ val , $ anotherField )
458+ public function inFieldValidator ($ val , string $ anotherField )
456459 {
457460 if ($ anotherField && $ dict = $ this ->getByPath ($ anotherField )) {
458461 return ValidatorList::in ($ val , $ dict );
@@ -461,6 +464,17 @@ public function inFieldValidator($val, $anotherField)
461464 return false ;
462465 }
463466
467+ /**
468+ * 验证数组时,指定的字段不能有任何重复值。
469+ * `['foo.*.id', 'distinct']`
470+ * @param mixed $val
471+ * @return bool
472+ */
473+ public function distinctValidator ($ val )
474+ {
475+ return ValidatorList::distinct ($ val );
476+ }
477+
464478 /**
465479 * 比较两个日期字段的 间隔天数 是否符合要求
466480 * @todo
@@ -475,9 +489,27 @@ public function intervalDayValidator($val, $compareField, $expected, $op = '>=')
475489 }
476490
477491 /*******************************************************************************
478- * getter/setter
492+ * getter/setter/helper
479493 ******************************************************************************/
480494
495+ /**
496+ * @param string $name
497+ * @return bool
498+ */
499+ public static function isCheckFile (string $ name )
500+ {
501+ return false !== strpos (self ::$ _fileValidators , '| ' . $ name . '| ' );
502+ }
503+
504+ /**
505+ * @param string $name
506+ * @return bool
507+ */
508+ public static function isCheckRequired (string $ name )
509+ {
510+ return 0 === strpos ($ name , 'required ' );
511+ }
512+
481513 /**
482514 * @param string $field
483515 * @return array|null
0 commit comments