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