diff --git a/src/Validator.php b/src/Validator.php index e944932..9770261 100644 --- a/src/Validator.php +++ b/src/Validator.php @@ -245,11 +245,12 @@ protected function getAliasName(ReflectionProperty|ReflectionParameter $reflecti */ protected function isToValidate(ReflectionProperty|ReflectionParameter $reflection): bool { + $useSerialization = $this->context->getOptional('internal.options.ignore.useSerialization', false); $allAttributes = $reflection->getAttributes(Options\Ignore::class); foreach ($allAttributes as $attribute) { $instance = $attribute->newInstance(); - return ! $instance->ignoreValidation(); + return $useSerialization ? ! $instance->ignoreSerialization() : ! $instance->ignoreValidation(); } return true; diff --git a/tests/Integration/OptionsTest.php b/tests/Integration/OptionsTest.php index 38e3dfd..94a87f0 100644 --- a/tests/Integration/OptionsTest.php +++ b/tests/Integration/OptionsTest.php @@ -15,6 +15,7 @@ use Attributes\Options as Options; use Attributes\Options\Exceptions\InvalidOptionException; use Attributes\Options\Ignore; +use Attributes\Validation\Context; use Attributes\Validation\Tests\Models as Models; use Attributes\Validation\Validator; @@ -130,8 +131,9 @@ $validator = new Validator(strict: $isStrict); $rawData = [ 'value' => 'my value', - 'ignore' => 'ignored', - 'ignoreValidation' => 'ignored', + 'ignore' => 'both', + 'ignoreValidation' => 'validation', + 'ignoreSerialization' => 'serialization', ]; $model = $validator->validate($rawData, new class { @@ -142,11 +144,47 @@ #[Ignore(serialization: false)] public string $ignoreValidation = 'original'; + + #[Ignore(validation: false)] + public string $ignoreSerialization = 'original'; + }); + expect($model) + ->toHaveProperty('value', 'my value') + ->toHaveProperty('ignore', 'original') + ->toHaveProperty('ignoreValidation', 'original') + ->toHaveProperty('ignoreSerialization', 'serialization'); +}) + ->with([true, false]) + ->group('validator', 'options', 'ignore'); + +test('Ignore as a serializer', function (bool $isStrict) { + $context = new Context; + $context->set('internal.options.ignore.useSerialization', true); + $validator = new Validator(strict: $isStrict, context: $context); + $rawData = [ + 'value' => 'my value', + 'ignore' => 'both', + 'ignoreValidation' => 'validation', + 'ignoreSerialization' => 'serialization', + ]; + $model = $validator->validate($rawData, new class + { + public string $value; + + #[Ignore] + public string $ignore = 'original'; + + #[Ignore(serialization: false)] + public string $ignoreValidation = 'original'; + + #[Ignore(validation: false)] + public string $ignoreSerialization = 'original'; }); expect($model) ->toHaveProperty('value', 'my value') ->toHaveProperty('ignore', 'original') - ->toHaveProperty('ignoreValidation', 'original'); + ->toHaveProperty('ignoreValidation', 'validation') + ->toHaveProperty('ignoreSerialization', 'original'); }) ->with([true, false]) ->group('validator', 'options', 'ignore');