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