powar/json-validator 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

powar/json-validator

Composer 安装命令:

composer require powar/json-validator

包简介

Simple Json validator for PHP. Very faster, easy to configuration.

README 文档

README

EasyJsonValidator - simple Json validator for PHP. Very faster, easy to configuration. This validator work without JsonSchema(http://json-schema.org/).

Capability

  1. Simple type check, like field name - string
  2. Range check, like filed number - form 1 to 10, or field date -> from 2019-01-01 to 2019-02-01
  3. Require check, like field id is require
  4. Nested objects check, like multidimensional array with all available validation
  5. DateTime check in any date format
  6. Check by pattern (preg_match), like field email - /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i
  7. Check by callback, like field email - function($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); }
  8. Customisation error message for any rule

Installation

composer require powar/json-validator

Usage

get any json

$json = json_encode(['id' => 11, 'name' => 'JohnDoe', 'balance' => null, 'date' => date(DateTime::ISO8601)]);

create rules

$rules = [
    'id' => [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MAX_VAL => 10,
    ],
    'name' => Validator::TYPE_STRING,
    'balance' => Validator::TYPE_NULL,
    'date' => Validator::TYPE_DATETIME,
];

validate

$validator = new \Powar\JsonValidator\Validator();
$validator->validate($json, $rules);

check errors exist

if ($validator->hasErrors()) {
    print_r($validator->getErrors());
}

array(1) {
   'id' =>
   string(20) "must be less than 10"
 }

Documentation

Make rules

The validate method takes a second parameter with array of rules for validation

simple example:

$rules = ['id' => 'int']
$validator->validate($json, $rules);

This rule will only check the incoming json for matching the id:integer field.

Note, you can write explicitly 'int' or another type, but I recommend using Validator::TYPE constants.*

example with constant:

$rules = ['id' => Validator::TYPE_INTEGER];

List of constants for rules:

type constant available configuration
string Validator::TYPE_STRING KEY_REQUIRE, KEY_MAX_STR, KEY_MIN_STR, KEY_PATTERN, KEY_CALLBACK, KEY_LABEL
int Validator::TYPE_INTEGER KEY_REQUIRE, KEY_MAX_STR, KEY_MIN_STR, KEY_MIN_VAL, KEY_MAX_VAL,KEY_LABEL
number Validator::TYPE_NUMBER KEY_REQUIRE, KEY_MAX_VAL, KEY_MIN_VAL, KEY_LABEL
bool Validator::TYPE_BOOLEAN KEY_REQUIRE, KEY_BOOL_VAL, KEY_LABEL
array Validator::TYPE_ANY KEY_REQUIRE, KEY_LABEL
any Validator::TYPE_BOOLEAN KEY_REQUIRE, KEY_CALLBACK, KEY_LABEL
datetime Validator::TYPE_DATETIME KEY_REQUIRE, KEY_MIN_VAL, KEY_MAX_VAL, KEY_FORMAT, KEY_LABEL
null Validator::TYPE_NULL KEY_REQUIRE, KEY_LABEL

example with configure:

$rules = ['id' => [
            Validator::KEY_TYPE => Validator::TYPE_INTEGER,
            Validator::KEY_MAX_VAL => 10,
            ]
         ];

Note that now id contains an array where the required key is Validator :: KEY_TYPE, which must contain the type as in the simple case

List of constants for configure:

constant string reqire description
Validator::KEY_TYPE type + required key if you use array with configuration rule
Validator::KEY_LABEL label - for customization error message
Validator::KEY_REQUIRE require - just checks whether json contains element. Default true
Validator::KEY_MIN_STR min-str - Minimum number of characters (php strlen)
Validator::KEY_MAX_STR max-str - Maximum number of characters (php strlen)
Validator::KEY_MIN_VAL min-val - Minimum value (php <)
Validator::KEY_MAX_VAL max-val - Maximum value (php >)
Validator::KEY_PATTERN pattern - check by regexp (php preg_match)
Validator::KEY_FORMAT format - create date object from json, by format (php DateTime::createFromFormat)
Validator::KEY_BOOL format - create date object from json, by format (php DateTime::createFromFormat)
Validator::KEY_CALLBACK callback - check by callback (php is_callable -> call)
Validator::KEY_RULE rule - include rule

Some examples

You can use existence rule if you json contains included object

$someRule = [
    'some_field' => [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MAX_VAL => 10,
        Validator::KEY_MAX_STR => 2,
    ],
    'some_date' => [
        Validator::KEY_TYPE => Validator::TYPE_DATETIME,
        Validator::KEY_FORMAT => 'Y-m-d\TH:i:sP',
        Validator::KEY_REQUIRE => false,
    ]
];

$rules = [
    'some_id' => Validator::TYPE_INTEGER,
    'some_clildren_element' => [
        Validator::KEY_TYPE => Validator::TYPE_ARRAY,
        Validator::KEY_RULE => $someRule,
    ]
];

Or you can create some small rules like this:

$idRule = [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MIN_STR => 1,
        Validator::KEY_MAX_STR => 11,
];

$dateRule = [
    Validator::KEY_TYPE => Validator::TYPE_DATETIME,
    Validator::KEY_FORMAT => DateTime::ISO8601,
    Validator::KEY_REQUIRE => false,
];

And use it for any rules:

$rules = [
    'some_id' => $idRule,
    'some_date' => $dateRule,
];

NOTE! In case when you create rule for TYPE_DATETIME, you need be careful, because KEY_MIN_VAL and KEY_MAX_VAL can work is not obvious

For Example, you need to create check for day of birth (Over 18 years of age, you know ;) )

$minDate = new DateTime();
$minDate->modify('-18 year');
$format = 'Y-m-d';

$rule = [
    'day_of_birth' => [
        Validator::KEY_TYPE => Validator::TYPE_DATETIME,
        Validator::KEY_FORMAT => $format,
        Validator::KEY_MIN_VAL => $minDate->format($format), //<< WRONG
    ]
];

Should be with Validator::KEY_MAX_VAL :

$minDate = new DateTime();
$minDate->modify('-18 year');
$format = 'Y-m-d';

$rule = [
    'day_of_birth' => [
        Validator::KEY_TYPE => Validator::TYPE_DATETIME,
        Validator::KEY_FORMAT => $format,
        Validator::KEY_MAX_VAL => $minDate->format($format),
    ]
];

Callback example

 $rule = [
     'email' => [
         Validator::KEY_TYPE => Validator::TYPE_STRING,
         Validator::KEY_CALLBACK => function($email) {
            return filter_var($email, FILTER_VALIDATE_EMAIL);
         }
     ]
 ];

Custom error message

$someRule = [
    'some_field' => [
        Validator::KEY_TYPE => Validator::TYPE_INTEGER,
        Validator::KEY_MAX_VAL => 10,
        Validator::KEY_MAX_STR => 2,
        Validator::KEY_LABEL => 'validator.error.some_field',
    ],
];

getErrors() -> ['some_field' => 'validator.error.some_field']

More examples you can see in unit tests

powar/json-validator 适用场景与选型建议

powar/json-validator 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 86.64k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2017 年 08 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「json」 「validator」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 powar/json-validator 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 powar/json-validator 我们能提供哪些服务?
定制开发 / 二次开发

基于 powar/json-validator 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 86.64k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 11
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-08-04