New in Symfony 5.4: New Validation Constraints
November 12, 2021 • Published by Javier Eguiluz
Symfony 5.4 is backed by:
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.
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;
}
CssColor Validator
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;
}
Help the Symfony project!
As with any Open-Source project, contributing code or documentation is the most common way to help, but we also have a wide range of sponsoring opportunities.
Comments are closed.
To ensure that comments stay relevant, they are closed for old posts.