SymfonyWorld Online 2021 Winter Edition December 9 – 10, 2021 100% Online 25 talks and 10 workshops

New in Symfony 5.4: New Validation Constraints

Symfony 5.4 is backed by Private Packagist. Private Packagist is a fast, reliable, and secure Composer repository for your private packages. It mirrors all your open-source dependencies for better availability and monitors them for security vulnerabilities.

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

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

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

Login with SymfonyConnect to post a comment