build-configs/src/Action/ValidateConfigurationData.php

33 lines
1.2 KiB
PHP
Raw Normal View History

2023-04-25 00:16:21 +01:00
<?php
declare(strict_types=1);
namespace App\Action;
use App\DataTransferObject\Config;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Validator\Validation;
2023-04-25 00:41:25 +01:00
final class ValidateConfigurationData
2023-04-25 00:16:21 +01:00
{
public function handle(array $configurationData, \Closure $next) {
// Convert the input to a configuration data object.
$normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
$serializer = new Serializer([$normalizer], [new JsonEncoder()]);
$configurationDataDto = $serializer->deserialize(json_encode($configurationData), Config::class, 'json');
2023-04-25 00:16:21 +01:00
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
$violations = $validator->validate($configurationDataDto);
2023-04-25 00:16:21 +01:00
if (0 < $violations->count()) {
2023-04-25 00:41:25 +01:00
throw new \RuntimeException('Configuration is invalid.');
2023-04-25 00:16:21 +01:00
}
2023-07-06 22:46:41 +01:00
return $next([$configurationData, $configurationDataDto]);
2023-04-25 00:16:21 +01:00
}
}