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.
Contributed by Sorin Pop
in #43593.
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// src/Entity/RoutingTable.php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class RoutingTable
{
#[Assert\Cidr]
protected $cidr;
#[Assert\Cidr(version: 6)]
protected $anotherCidr;
#[Assert\Cidr(netmaskMax: 20, version: 4)]
protected $yetAnotherCidr;
}
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:
1
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 App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class ThemeColors
{
#[Assert\CssColor]
protected $bodyBackgroundColor;
#[Assert\CssColor(
formats: Assert\CssColor::HEX_LONG,
message: 'The accent color must be a 6-character hexadecimal color.',
)]
protected $accentColor;
#[Assert\CssColor(
formats: [Assert\CssColor::BASIC_NAMED_COLORS, Assert\CssColor::EXTENDED_NAMED_COLORS],
message: 'The color '{{ value }}' is not a valid CSS color name.',
)]
protected $headerColor;
}
Sponsor the Symfony project.