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