diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml index 0201281..caacdfe 100644 --- a/config/packages/validator.yaml +++ b/config/packages/validator.yaml @@ -1,6 +1,8 @@ framework: validation: email_validation_mode: html5 + enabled: true + translation_domain: validation_errors # Enables validator auto-mapping support. # For instance, basic validation constraints will be inferred from Doctrine's metadata. diff --git a/src/Entity/QRCode/QRCode.php b/src/Entity/QRCode/QRCode.php index f617b4f..6ff8408 100644 --- a/src/Entity/QRCode/QRCode.php +++ b/src/Entity/QRCode/QRCode.php @@ -2,30 +2,47 @@ declare(strict_types=1); namespace App\Entity\QRCode; +use Symfony\Component\Validator\Constraints as Assert; /** * QRCode description */ class QRCode { + #[Assert\NotBlank] + #[Assert\Iban( + message: 'messages.not_a_iban_number', + )] private ?string $iban; + #[Assert\NotBlank(message: 'messages.fill_value')] + #[Assert\GreaterThanOrEqual( + 'today', message: 'messages.invalid_date' + )] private ?\DateTime $dueDate; + #[Assert\NotBlank(message: 'messages.fill_value')] private ?string $message; + + #[Assert\Valid] + #[Assert\NotBlank] private ?QRCodeMoney $money; + #[Assert\Valid] + #[Assert\NotBlank] private ?QRCodePaymentIdentification $paymentIdentification; + #[Assert\Valid] + #[Assert\NotBlank] private readonly QRCodeQROptions $codeQROptions; /** * @param QRCodeQROptions $codeQROptions * @param string|null $iban - * @param string|null $dueDate + * @param \DateTime|null $dueDate * @param string|null $message * @param QRCodeMoney|null $money */ public function __construct( QRCodeQROptions $codeQROptions, ?string $iban = null, - ?string $dueDate = null, + ?\DateTime $dueDate = null, ?string $message = null, ?QRCodeMoney $money = null) { diff --git a/src/Entity/QRCode/QRCodeMoney.php b/src/Entity/QRCode/QRCodeMoney.php index 9dcb07d..96198ef 100644 --- a/src/Entity/QRCode/QRCodeMoney.php +++ b/src/Entity/QRCode/QRCodeMoney.php @@ -3,13 +3,22 @@ declare(strict_types=1); namespace App\Entity\QRCode; +use App\Service\CurrencyListerInterface; +use Symfony\Component\Validator\Constraints as Assert; + /** * Money type for QR code */ class QRCodeMoney { + #[Assert\Positive( + message: 'messages.not_valid_amount', + )] + #[Assert\NotBlank(message: 'messages.fill_value')] private ?string $amount; + // TODO: getCurrencies validation + #[Assert\NotBlank(message: 'messages.fill_value')] private ?string $currency; /** diff --git a/src/Entity/QRCode/QRCodePaymentIdentification.php b/src/Entity/QRCode/QRCodePaymentIdentification.php index c66d977..7845c08 100644 --- a/src/Entity/QRCode/QRCodePaymentIdentification.php +++ b/src/Entity/QRCode/QRCodePaymentIdentification.php @@ -3,12 +3,46 @@ declare(strict_types=1); namespace App\Entity\QRCode; +use Symfony\Component\Validator\Constraints as Assert; + /** * Payment identification for QR code */ class QRCodePaymentIdentification { + #[Assert\NotBlank(message: 'messages.fill_value')] + #[Assert\Length( // <<< Ano, mohl jsem si napsat vlastni validator ... + min: 1, + max: 10, + minMessage: 'messages.not_variable_symbol', + maxMessage: 'messages.not_variable_symbol', + )] // https://en.wikipedia.org/wiki/Variable_symbol + #[Assert\Positive( + message: 'messages.not_variable_symbol', + )] private string $variableSymbol; + + #[Assert\NotBlank(message: 'messages.fill_value')] + #[Assert\Length( + min: 1, + max: 10, + minMessage: 'messages.not_specific_symbol', + maxMessage: 'messages.not_specific_symbol', + )] // https://cs.wikipedia.org/wiki/Specifick%C3%BD_symbol + #[Assert\Positive( + message: 'The {{ value }} is not a variable symbol.', + )] private string $specificSymbol; + + #[Assert\NotBlank(message: 'messages.fill_value')] + #[Assert\Length( + min: 1, + max: 10, + minMessage: 'messages.not_constant_symbol', + maxMessage: 'messages.not_constant_symbol', + )] // https://www.hyponamiru.cz/en/glossary/constant-symbol/ + #[Assert\Positive( + message: 'messages.not_constant_symbol', + )] private string $constantSymbol; public function getVariableSymbol(): string diff --git a/src/Entity/QRCode/QRCodeQROptions.php b/src/Entity/QRCode/QRCodeQROptions.php index 25fed77..ffa5888 100644 --- a/src/Entity/QRCode/QRCodeQROptions.php +++ b/src/Entity/QRCode/QRCodeQROptions.php @@ -3,11 +3,22 @@ declare(strict_types=1); namespace App\Entity\QRCode; +use Symfony\Component\Validator\Constraints as Assert; + /** * Options for generating QR code */ readonly class QRCodeQROptions { + #[Assert\Positive( + message: 'messages.scale_must_be_positive', + )] + #[Assert\NotBlank(message: 'messages.fill_value')] private int $scale; + + #[Assert\PositiveOrZero( + message: 'messages.margin_must_be_positive', + )] + #[Assert\NotBlank(message: 'messages.fill_value')] private int $margin; /** diff --git a/src/Form/Type/QRCodeType.php b/src/Form/Type/QRCodeType.php index a113749..32987af 100644 --- a/src/Form/Type/QRCodeType.php +++ b/src/Form/Type/QRCodeType.php @@ -22,7 +22,7 @@ class QRCodeType extends AbstractType ->add('message', TextType::class) ->add('money', QRCodeMoneyType::class) ->add('paymentIdentification', QRCodePaymentIdentificationType::class) - ->add('save', SubmitType::class); + ->add('generate_qr_code', SubmitType::class); } public function configureOptions(OptionsResolver $resolver): void