mrferos/comfort

0.2.5 2016-05-20 13:11 UTC

This package is auto-updated.

Last update: 2024-09-06 09:42:53 UTC


README

Travis-CI Scrutinizer Code Quality Coverage Status

为您的数据提供简单且灵活的验证。

Comfort 是一个易于使用的验证库,其设计灵感来源于 Joi,一个优秀(并且目前功能更强大)的对象验证库。

示例

$json = <<<JSON
{
    "first_name": "Andres",
    "last_name": "Galindo",
    "email": "test@test.com",
    "address": {
        "street_addr1": "123 Joi lane",
        "city": "Miami",
        "state": "FL"
    }
}
JSON;

$stateArray = array(
    'AL'=>'ALABAMA',
    'AK'=>'ALASKA',
    'AS'=>'AMERICAN SAMOA',
    'AZ'=>'ARIZONA',
    'AR'=>'ARKANSAS',
    'CA'=>'CALIFORNIA',
    'CO'=>'COLORADO',
    'CT'=>'CONNECTICUT',
    'DE'=>'DELAWARE',
    'DC'=>'DISTRICT OF COLUMBIA',
    'FM'=>'FEDERATED STATES OF MICRONESIA',
    'FL'=>'FLORIDA',
    /** taken out for brevity */
);

$registrationSchema = cmf()->json()->keys([
    "first_name" => cmf()->string()->required()->alpha()->min(1),
    "last_name"  => cmf()->string()->required()->alpha()->min(1),
    "email" => cmf()->string()->email(),
    "address"    => cmf()->array()->keys([
        "street_addr1" => cmf()->string()->required()->min(2),
        "street_addr2" => cmf()->string()->optional()->min(2),
        "city"         => cmf()->string()->required()->min(2),
        "state"        => cmf()->string()->alternatives([
            [
                'is' => cmf()->string()->length(2),
                'then' => cmf()->string()->anyOf(array_keys($stateArray)),
                'else' => cmf()->string()->anyOf(array_values($stateArray))
            ],
        ])
    ])->required()
]);

上述模式将验证以下内容

  • first_name, last_name
    • 必须是一个字符串
    • 是必需的
    • 只包含字母(a-z)字符
    • 至少1个字符
  • email
    • 必须是一个字符串
    • 必须是一个电子邮件
    • 可选的
  • address
    • 必须是一个数组
    • 必须具有以下键(以及它们自己的验证)
      • street_addr1, city
        • 必须是一个字符串
        • 是必需的
        • 至少包含2个字符
      • street_addr2
        • 必须是一个字符串
        • 至少包含2个字符
        • 可选的(除非明确指定 required(),否则一切都是可选的)
      • state
        • 如果 字符串正好是2个字符,则
          • 字符串可以是任何州的简称(例如 FL)
        • 否则 字符串必须是任何州的完整名称(例如 Florida)

使用方法

使用 Comfort 意味着定义您的模式,就像我们上面做的那样,这将返回一个可调用的函数,可以像这样使用

$data = $registrationSchema($jsonData);

这将执行两件事

  • 运行验证堆栈
  • 以数组(见下文)或 ValidationError 实例的形式返回数据

目前只有 json() 验证器会自动转换您的数据,其他验证器目前将返回数据为传入的数据类型。

更多信息请参阅我们的 API 参考: API.md

自定义验证器

当需要业务特定的验证时,机制很简单。例如,如果需要将电子邮件验证更改为允许自定义验证模式,可以这样完成

class CustomerStringValidator extends \Comfort\Validator\StringValidator {        
        public function email()
        {
            return $this->add(function ($value, $nameKey) {
                if (strstr($value, 'test')) {
                    return $this->createError('string.email', $value, $nameKey);
                }
            });
        }
}

\Comfort\Comfort::registerValidator('string', CustomerStringValidator::class);

随后的对 cmf()->string()->email('test@gmail.com') 的调用将运行此新验证器。

注意:验证器 必须 扩展 \Comfort\Validator\AbstractValidator