lolltec / limoncello-php-component-validation
验证框架。
Requires
- php: >=7.3.0
- lolltec/limoncello-php-component-common: dev-master
- lolltec/limoncello-php-component-contracts: dev-master
Requires (Dev)
- mockery/mockery: ^1.0
- phpmd/phpmd: ^2.8
- phpunit/phpunit: ^9.0
- scrutinizer/ocular: ^1.4
- squizlabs/php_codesniffer: ^2.9
This package is auto-updated.
Last update: 2024-09-25 20:00:26 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 lolltec/limoncello-php-validation
注意:对于消息翻译,需要 PHP-intl。
问题
有关任何相关问题的反馈,请发送到 limoncello。
测试
$ composer test