simple-as-fuck / php-validator
Requires
- php: ^8.1
- ext-mbstring: *
Requires (Dev)
- phpstan/phpstan: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-strict-rules: ^1.1
- phpunit/phpunit: ^9.5
- 0.6.x-dev
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.x-dev
- 0.5.16
- 0.5.15
- 0.5.14
- 0.5.13
- 0.5.12
- 0.5.11
- 0.5.10
- 0.5.9
- 0.5.8
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.x-dev
- 0.4.17
- 0.4.16
- 0.4.15
- 0.4.14
- 0.4.13
- 0.4.12
- 0.4.11
- 0.4.10
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.12
- 0.3.11
- 0.3.10
- 0.3.9
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.11
- 0.2.10
- 0.2.9
- 0.2.8
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.0
This package is auto-updated.
Last update: 2024-09-25 15:05:59 UTC
README
php变量验证器,具有直观的规则链,放入混合中,你最后得到所需的数据类型。
安装
composer require simple-as-fuck/php-validator
支持
如果composer.json中指定的PHP平台要求以安全支持结尾,则将除最后一个版本之外的所有版本视为不受支持。
用法
/** @var mixed $value */ $value = $config->get('some_value_name'); $rules = \SimpleAsFuck\Validator\Factory\Validator::make($value, 'Config "some_value_name" value'); $validValue = $rules->string()->notEmpty()->notNull(); /* * now you have in $validValue really not empty string and even phpstan know the type without any annoying annotation * if validation failed \UnexpectedValueException('Config "some_value_name" value must ...') is thrown from rule chain */ $stringValues = $rules->array()->ofString()->notNull(); /* * shorter notation, value name in validator factory is optional and here is unnecessary, * validation exception is thrown in same line as config key name * so you should this find in your stacktrace and know than something is wrong in your config file */ \SimpleAsFuck\Validator\Factory\Validator::make($config->get('some_value_name'))->string()->notEmpty()->notNull();
此验证可以应用于任何PHP变量,适用于json解码数据。所有规则都为链中的下一个规则声明了类型,因此不需要查找规则列表,你的IDE应该会提示可用的规则,规则链的设计旨在防止冗余规则或不合理的规则组合。
验证异常类型更改
在验证失败时,您可以通过注入自己的异常工厂来更改从规则链抛出的异常类型。
如果您想抛出一些HTTP异常来验证HTTP请求,请注意此验证器不适合验证用户输入。
第一:验证器在嵌套结构中的第一个失败的规则处失败,并且即使可能还有更多的验证失败,也只会抛出一个异常。
第二:验证器抛出高度生成的消息,这些消息可能对用户不可读,且没有计划支持翻译,对于我们这些开发者来说,消息应该是可以的。
第三:意识到我们正在编写PHP服务器端应用程序,因此应用程序应以某些API格式返回数据,并且视图数据应该是某些奇特的JavaScript、本地或移动客户端应用程序。是的,我知道即使PC游戏也是在云端渲染的,但客户端PC也有一定的计算能力,如果客户端逻辑和HTML在服务器端渲染,这只会浪费其能力。
final class ExceptionFactory extends \SimpleAsFuck\Validator\Factory\Exception { /** * @param non-empty-string $message */ public function create(string $message): \Exception { return new \RuntimeException($message); } } $exceptionFactory = new \ExceptionFactory(); $value = new \SimpleAsFuck\Validator\Model\Validated(1); $rules = new \SimpleAsFuck\Validator\Rule\General\Rules($exceptionFactory, 'variable', $value); $validValue = $rules->int()->notNull();
自定义
用户定义规则
您可以创建自己的规则并将其放在规则链的末尾,这允许您运行一些自己的验证。
如果您正在验证某些广泛标准化的内容,请考虑为规则链做出贡献,以更好地编写它或与他人分享一些规则。
/** * @implements \SimpleAsFuck\Validator\Rule\Custom\UserDefinedRule<string, string> */ final class GandalfRule implements \SimpleAsFuck\Validator\Rule\Custom\UserDefinedRule { /** * @param string $value */ public function validate($value): ?string { throw new \SimpleAsFuck\Validator\Model\ValueMust('not pass'); } } $rules = \SimpleAsFuck\Validator\Factory\Validator::make(''); $rules->string()->custom(new \GandalfRule())->notNull();
用户类规则
验证器规则链总是返回某种特定类型,因此通用对象不在选项之列。您可以将对象转换为具有验证结构的某些类。
/** * @implements \SimpleAsFuck\Validator\Rule\Custom\UserClassRule<YourClass> */ final class YourClassRule implements \SimpleAsFuck\Validator\Rule\Custom\UserClassRule { public function validate(\SimpleAsFuck\Validator\Rule\Object\ObjectRule $object): YourClass { return new YourCass( $object->property('propertyName')->string()->max(30)->notNull() // some next property ... ); } } /** @var mixed $data */ $rules = \SimpleAsFuck\Validator\Factory\Validator::make($data); $yourObject = $rules->object()->class(new YourClassRule())->notNull(); $yourObjects = $rules->array()->ofClass(new YourClassRule())->notNull();