New in Symfony 5.4: New Validation Constraints
The Symfony Validator component provides tens of validators to validate
that a given value matches some expected constraints (e.g. not blank, being a
valid IP address, being a string shorter than 255 characters, etc.)
In Symfony 5.4 we’ve expanded that list with two new validators/constraints.
CIDR Validator
This checks that a value is a valid CIDR (Classless Inter-Domain Routing)
notation. By default, it validates the CIDR’s IP and netmask both for version 4
and 6, with the option of allowing only one type of IP version to be valid.
It also supports a minimum and maximum range constraint in which the value of
the netmask is valid.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// src/Entity/RoutingTable.php
namespace AppEntity;
use SymfonyComponentValidatorConstraints as Assert;
class RoutingTable
{
#[AssertCidr]
protected $cidr;
#[AssertCidr(version: 6)]
protected $anotherCidr;
#[AssertCidr(netmaskMax: 20, version: 4)]
protected $yetAnotherCidr;
}
CssColor Validator
Contributed by
Mathieu Santostefano
in #40168.
CSS colors handling is common in applications like CMS and site builders.
Checking that some given value is a valid CSS color (e.g. to allow users
customize some themes) is not an easy feat because there are a lot of different
ways to define a color in CSS.
By default, this new constraint allows all the CSS color formats (RGB, HEX, HSL,
named colors, keywords, etc.) but you can restrict the formats allowed:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// src/Entity/ThemeColors.php
namespace AppEntity;
use SymfonyComponentValidatorConstraints as Assert;
class ThemeColors
{
#[AssertCssColor]
protected $bodyBackgroundColor;
#[AssertCssColor(
formats: AssertCssColor::HEX_LONG,
message: ‚The accent color must be a 6-character hexadecimal color.‘,
)]
protected $accentColor;
#[AssertCssColor(
formats: [AssertCssColor::BASIC_NAMED_COLORS, AssertCssColor::EXTENDED_NAMED_COLORS],
message: ‚The color ‚{{ value }}‚ is not a valid CSS color name.‘,
)]
protected $headerColor;
}
Symfony Blog
Read More