diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 75e9374..2ce0b1e 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -12,7 +12,5 @@ jobs: with: os: >- ['ubuntu-latest'] - php: >- - ['8.1', '8.2'] stability: >- ['prefer-lowest', 'prefer-stable'] diff --git a/composer.json b/composer.json index 6b22ef4..a7c2557 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ "require": { "php": ">=8.1", "ext-json": "*", - "spiral/core": "^3.1", + "spiral/core": "^3.6", "spiral/files": "^3.1", "spiral/streams": "^3.1", "spiral/translator": "^3.1", diff --git a/src/Checker/AddressChecker.php b/src/Checker/AddressChecker.php index 081b0c4..be38fad 100644 --- a/src/Checker/AddressChecker.php +++ b/src/Checker/AddressChecker.php @@ -4,10 +4,11 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; -final class AddressChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class AddressChecker extends AbstractChecker { public const MESSAGES = [ 'email' => '[[Must be a valid email address.]]', diff --git a/src/Checker/BooleanChecker.php b/src/Checker/BooleanChecker.php index 43f5e24..737d8fb 100644 --- a/src/Checker/BooleanChecker.php +++ b/src/Checker/BooleanChecker.php @@ -4,10 +4,11 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; -final class BooleanChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class BooleanChecker extends AbstractChecker { public const MESSAGES = [ 'isTrue' => '[[Should be true.]]', diff --git a/src/Checker/DatetimeChecker.php b/src/Checker/DatetimeChecker.php index 3de42bd..f1c4c32 100644 --- a/src/Checker/DatetimeChecker.php +++ b/src/Checker/DatetimeChecker.php @@ -4,11 +4,12 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; use Spiral\Validator\Checker\DatetimeChecker\ThresholdChecker; -final class DatetimeChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class DatetimeChecker extends AbstractChecker { public const MESSAGES = [ 'future' => '[[Should be a date in the future.]]', diff --git a/src/Checker/FileChecker.php b/src/Checker/FileChecker.php index 9aa114f..6422928 100644 --- a/src/Checker/FileChecker.php +++ b/src/Checker/FileChecker.php @@ -5,12 +5,13 @@ namespace Spiral\Validator\Checker; use Psr\Http\Message\UploadedFileInterface; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Files\FilesInterface; use Spiral\Validator\AbstractChecker; use Spiral\Validator\Checker\Traits\FileTrait; -final class FileChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class FileChecker extends AbstractChecker { use FileTrait; diff --git a/src/Checker/ImageChecker.php b/src/Checker/ImageChecker.php index 1956d11..41d07e4 100644 --- a/src/Checker/ImageChecker.php +++ b/src/Checker/ImageChecker.php @@ -5,13 +5,14 @@ namespace Spiral\Validator\Checker; use Psr\Http\Message\UploadedFileInterface; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Files\FilesInterface; use Spiral\Streams\StreamableInterface; use Spiral\Validator\AbstractChecker; use Spiral\Validator\Checker\Traits\FileTrait; -final class ImageChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class ImageChecker extends AbstractChecker { use FileTrait; diff --git a/src/Checker/MixedChecker.php b/src/Checker/MixedChecker.php index c6cc613..7fe9290 100644 --- a/src/Checker/MixedChecker.php +++ b/src/Checker/MixedChecker.php @@ -4,10 +4,11 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; -final class MixedChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class MixedChecker extends AbstractChecker { public const MESSAGES = [ 'cardNumber' => '[[Please enter valid card number.]]', diff --git a/src/Checker/NumberChecker.php b/src/Checker/NumberChecker.php index dc2b2de..d357cb0 100644 --- a/src/Checker/NumberChecker.php +++ b/src/Checker/NumberChecker.php @@ -4,10 +4,11 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; -final class NumberChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class NumberChecker extends AbstractChecker { public const MESSAGES = [ 'range' => '[[Your value should be in range of {1}-{2}.]]', diff --git a/src/Checker/StringChecker.php b/src/Checker/StringChecker.php index 864a955..14c0612 100644 --- a/src/Checker/StringChecker.php +++ b/src/Checker/StringChecker.php @@ -4,10 +4,11 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; -final class StringChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class StringChecker extends AbstractChecker { public const MESSAGES = [ 'regexp' => '[[Value does not match required pattern.]]', diff --git a/src/Checker/TypeChecker.php b/src/Checker/TypeChecker.php index 4aadfbe..e7090a5 100644 --- a/src/Checker/TypeChecker.php +++ b/src/Checker/TypeChecker.php @@ -4,11 +4,12 @@ namespace Spiral\Validator\Checker; -use Spiral\Core\Container\SingletonInterface; +use Spiral\Core\Attribute\Singleton; use Spiral\Validator\AbstractChecker; use Spiral\Validator\Checker\Traits\NotEmptyTrait; -final class TypeChecker extends AbstractChecker implements SingletonInterface +#[Singleton] +final class TypeChecker extends AbstractChecker { use NotEmptyTrait; diff --git a/tests/app/Bootloader/FiltersBootloader.php b/tests/app/Bootloader/FiltersBootloader.php index 64266ba..c8fd94f 100644 --- a/tests/app/Bootloader/FiltersBootloader.php +++ b/tests/app/Bootloader/FiltersBootloader.php @@ -9,6 +9,7 @@ use Spiral\Boot\Bootloader\Bootloader; use Spiral\Config\ConfiguratorInterface; use Spiral\Config\Patch\Append; +use Spiral\Core\Attribute\Singleton; use Spiral\Core\BinderInterface; use Spiral\Core\Container; use Spiral\Core\InterceptableCore; @@ -21,13 +22,19 @@ use Spiral\Filters\Model\Interceptor\PopulateDataFromEntityInterceptor; use Spiral\Filters\Model\Interceptor\ValidateFilterInterceptor; use Spiral\Filters\InputInterface; +use Spiral\Filters\Model\Mapper\CasterRegistry; +use Spiral\Filters\Model\Mapper\CasterRegistryInterface; +use Spiral\Filters\Model\Mapper\EnumCaster; +use Spiral\Filters\Model\Mapper\UuidCaster; use Spiral\Validator\App\InputScope; -final class FiltersBootloader extends Bootloader implements Container\InjectorInterface, Container\SingletonInterface +#[Singleton] +final class FiltersBootloader extends Bootloader implements Container\InjectorInterface { protected const SINGLETONS = [ FilterProviderInterface::class => [self::class, 'initFilterProvider'], InputInterface::class => InputScope::class, + CasterRegistryInterface::class => [self::class, 'initCasterRegistry'], ]; public function __construct( @@ -85,4 +92,9 @@ private function initFilterProvider( return new FilterProvider($container, $container, $core); } + + private function initCasterRegistry(): CasterRegistryInterface + { + return new CasterRegistry([new EnumCaster(), new UuidCaster()]); + } }