limoncello-php / validation
验证框架。
Requires
- php: >=7.3.0
- limoncello-php/common: ^0.10.0
- limoncello-php/contracts: ^0.10.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpmd/phpmd: ^2.8
- phpunit/phpunit: ^9.0
- scrutinizer/ocular: ^1.4
- squizlabs/php_codesniffer: ^2.9
- dev-master
- dev-develop / 0.10.x-dev
- 0.10.0
- 0.9.3
- 0.9.2
- 0.9.1
- 0.9.0
- 0.8.10
- 0.8.9
- 0.8.8
- 0.8.7
- 0.8.6
- 0.8.5
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.x-dev
- 0.6.18
- 0.6.17
- 0.6.16
- 0.6.15
- 0.6.14
- 0.6.13
- 0.6.12
- 0.6.11
- 0.6.10
- 0.6.9
- 0.6.8
- 0.6.7
- 0.6.6
- 0.6.5
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
This package is auto-updated.
Last update: 2024-09-10 01:29:08 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 \Limoncello\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 limoncello-php/validation
注意:对于消息翻译,需要PHP-intl。
问题
有关任何相关问题的,请发送到limoncello。
测试
$ composer test