mrferos / comfort
数据验证库
0.2.5
2016-05-20 13:11 UTC
Requires
Requires (Dev)
- phpunit/phpunit: ^4.0
README
为您的数据提供简单且灵活的验证。
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)
- 如果 字符串正好是2个字符,则
- street_addr1, city
使用方法
使用 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