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

Sorin Pop
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;
}

CssColor Validator

Mathieu Santostefano
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;
}
Published in #Living on the edge