New in Symfony 5.4: Nested Validation Attributes

Contributed by Alexandre Daubois in #41994.

In Symfony 5.2 we added a feature to define validation constraints as PHP attributes. Attributes were very recent at that time, because they had just been added to PHP 8.0. The only caveat was that you couldn't nest PHP attributes, so you couldn't use them with constraints such as AtLeastOneOf and Collection. Thankfully, PHP 8.1, released on November 25, 2021, adds support for nested attributes. That's why in Symfony 5.4 you'll be able to use PHP attributes to define all existing constraints, without any exemption. The trick that enables this feature is to use the new keyword to create the nested attribute:

    1

2 3 4 5 6 7

[Attribute1(new SubAttribute1())]

[Attribute2([new SubAttribute2(), new SubAttribute3()])]

[Attribute3(someProperty: new SubAttribute4())]

class SomeClass { // ... }

This is how it looks in practice when using Symfony Validator constraints in a complex example:

    1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 use Symfony\Component\Validator\Constraints as Assert;

class SomeClass {

[Assert\All([

    new Assert\NotNull(),
    new Assert\Range(min: 3),
])]
#[Assert\Collection(
    fields: [
        'foo' => [
            new Assert\NotNull(),
            new Assert\Range(min: 3),
        ],
        'bar' => new Assert\Range(min: 5),
        'baz' => new Assert\Required([new Assert\Email()]),
        'qux' => new Assert\Optional([new Assert\NotBlank()]),
    ],
    allowExtraFields: true
)]
private $property1;

#[Assert\AtLeastOneOf(
    constraints: [
        new Assert\NotNull(),
        new Assert\Range(min: 3),
    ],
    message: 'foo',
    includeInternalMessages: false,
)]
#[Assert\Sequentially([
    new Assert\NotBlank(),
    new Assert\Range(min: 5),
])]
private $property2;

// ...

}

                Sponsor the Symfony project.

http://feedproxy.google.com/~r/symfony/blog/~3/O6xhOezW6nk/new-in-symfony-5-4-nested-validation-attributes

Creato 4y | 5 nov 2021, 08:20:05


Accedi per aggiungere un commento

Altri post in questo gruppo

New in Symfony 7.3: JsonPath Component

Contributed by Alexandre Daubois in

8 mag 2025, 10:10:10 | Symfony
SymfonyOnline June 2025: Combining Turbo, LiveComponent & Stimulus... the Right Way?

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:

June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe

7 mag 2025, 13:10:15 | Symfony
New in Symfony 7.3: New and Improved Console Helpers

Symfony 7.3 introduces powerful improvements to the Console component, beyond the much-anticipated invokable commands and input attributes. This version also brings new helpers and features designed t

7 mag 2025, 08:30:04 | Symfony
New in Symfony 7.3: Static Error Pages

Contributed by Loick Piera in

6 mag 2025, 09:20:10 | Symfony
New in Symfony 7.3: Simpler Server Event Streaming

Contributed by Yonel Ceruto in

5 mag 2025, 07:50:03 | Symfony
A Week of Symfony #957 (April 28 – May 4, 2025)

This week, Symfony 6.4.21 and 7.2.6 maintenance versions were released. In addition, we published the first beta of Symfony 7.3 so you can test it in your own apps before its final release at the end

4 mag 2025, 08:40:05 | Symfony
Symfony 7.2.6 released

Symfony 7.2.6 has just been released. Here is the list of the most important changes since 7.2.5:

bug #60288 [VarExporter] dump default value for property hooks if present (@xabbuh)

bug #60267 [C

2 mag 2025, 12:40:05 | Symfony