whoa-php / validation
验证框架。
Requires
- php: ^7.4|^8.0
- whoa-php/common: dev-master
- whoa-php/contracts: dev-master
Requires (Dev)
- mockery/mockery: ^0.9|^1.0
- phpmd/phpmd: ^2.8
- phpunit/phpunit: ^9.5
- scrutinizer/ocular: ^1.4
- squizlabs/php_codesniffer: ^2.9
This package is auto-updated.
Last update: 2024-09-21 15:08:32 UTC
README
这个验证库速度快,使用简单,功能强大且灵活。与许多其他库不同,它不会尝试为所有可能的情况提供“验证规则”,因为这些实现可能不符合您的需求,并且使用此类库是一个痛点。相反,它提供了一种极其简单的方式来添加自定义验证规则。
此外,它支持验证规则的缓存,使其非常快速。同时支持自定义错误代码和消息。错误消息可以自定义/本地化,并支持占位符。
使用示例
$validator = v::validator([ 'sku' => r::required(r::sku()), 'amount' => r::required(r::amount(5)), 'delivery_date' => r::nullable(r::deliveryDate()), 'email' => r::email(), 'address1' => r::required(r::address1()), 'address2' => r::address2(), 'accepted' => r::required(r::areTermsAccepted()), ]); $input = [ 'sku' => '...', 'amount' => '...', ... ]; if ($validator->validate($input)) { // use validated/converted/sanitized inputs $validated = $validator->getCaptures(); } else { // print validation errors $errors = $validator->getErrors(); }
完整的示例代码 在这里。
如您所见,这些自定义规则,如sku、amount、deliveryDate、address1、address2和areTermsAccepted可以完美地与内置的required和nullable结合使用。这使得规则在CREATE和UPDATE操作中可重用,在这些操作中,通常在创建时需要输入,在更新时可选。
编写这些规则有多简单?许多可以从以下内置规则中创建(例如amount、address1、address2和areTermsAccepted)
equals、notEquals、inValues、lessThan、lessOrEquals、moreThan、moreOrEquals、between、stringLengthBetween、stringLengthMin、stringLengthMax、regexp、nullable、stringToBool、stringToDateTime、stringToFloat、stringToInt、stringArrayToIntArray、andX、orX、ifX、success、fail、required、enum、filter、isArray、isString、isBool、isInt、isFloat、isNumeric、isDateTime
class Rules extends \Whoa\Validation\Rules { public static function sku(): RuleInterface { return static::stringToInt(new IsSkuRule()); } public static function amount(int $max): RuleInterface { return static::stringToInt(static::between(1, $max)); } public static function deliveryDate(): RuleInterface { return static::stringToDateTime(DateTime::ISO8601, new IsDeliveryDateRule()); } public static function email(): RuleInterface { return static::isString( static::filter(FILTER_VALIDATE_EMAIL, null, Errors::IS_EMAIL, static::stringLengthMax(255)) ); } public static function address1(): RuleInterface { return static::isString(static::stringLengthBetween(1, 255)); } public static function address2(): RuleInterface { return static::nullable(static::isString(static::stringLengthMax(255))); } public static function areTermsAccepted(): RuleInterface { return static::stringToBool(static::equals(true)); } }
自定义规则如IsSkuRule可能需要查询数据库,并且可以以最小开销添加
class IsSkuRule extends ExecuteRule { public static function execute($value, ContextInterface $context): array { $pdo = $context->getContainer()->get(PDO::class); $isSku = ...; return $isSku === true ? self::createSuccessReply($value) : self::createErrorReply($context, $value, Errors::IS_VALID_SKU); } }
当创建验证器时,开发人员可以传递包含自定义服务的PSR 容器,并从验证规则中访问此容器。因此,验证可以轻松地集成到应用程序逻辑中。
安装
$ composer require whoa-php/validation
注意:对于消息翻译,需要PHP-intl。
问题
有关任何相关问题,请发送到whoa。
测试
$ composer test