Nicolas Grekas ee4e6730d6 feature #63714 [Console] Add validation constraints support to #[MapInput] (chalasr)
This PR was merged into the 8.1 branch.

Discussion
----------

[Console] Add validation constraints support to `#[MapInput]`

| Q             | A
| ------------- | ---
| Branch?       | 8.1
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Issues        | -
| License       | MIT

This adds automatic validation of `#[MapInput]` DTOs that uses Validator constraints (aligning with `#[MapRequestPayload]` for HTTP controllers).

When Validator is available, constraints on DTO properties are automatically enforced after the input is resolved. When it is not, they are ignored the same as today.

```php
use Symfony\Component\Console\Attribute\Argument;
use Symfony\Component\Console\Attribute\MapInput;
use Symfony\Component\Console\Attribute\Option;
use Symfony\Component\Validator\Constraints as Assert;

class CreateUserInput
{
    #[Argument]
    #[Assert\NotBlank]
    public string $name;

    #[Option]
    #[Assert\Email]
    public ?string $email = null;
}

#[AsCommand('app:create-user')]
class CreateUserCommand
{
    public function __invoke(#[MapInput] CreateUserInput $input): int {
        // validated
    }
}
```

With validation groups:

```php
public function __invoke(
    #[MapInput(validationGroups: ['registration'])] CreateUserInput $input
): int {
```

On failure, a `InputValidationFailedException` (wrapping the original Validator's exception that includes the constraint violations' list) is thrown.

Commits
-------

9ceb0fb59c [Console] Add validation constraints support to `#[MapInput]`
2026-03-23 20:59:39 +01:00
2018-09-06 16:22:56 +02:00
-
2025-07-10 10:48:10 +02:00
2025-09-14 10:01:01 +02:00
2026-03-06 17:58:43 +01:00
2026-03-06 17:28:06 +01:00
2023-01-24 15:02:46 +01:00
2026-02-13 13:29:53 +01:00
2026-02-22 13:27:52 +01:00
2026-01-08 12:15:34 +01:00
2025-11-02 09:43:04 +01:00

Symfony Logo

Symfony is a PHP framework for web and console applications and a set of reusable PHP components. Symfony is used by thousands of web applications and most of the popular PHP projects.

Installation

Sponsor

Symfony 8.0 is backed by:

Sulu is the CMS for Symfony developers. It provides pre-built content-management features while giving developers the freedom to build, deploy, and maintain custom solutions using full-stack Symfony. Sulu is ideal for creating complex websites, integrating external tools, and building custom-built solutions.

PhpStorm is a JetBrains IDE designed specifically for PHP development. Out of the box, PhpStorm provides you with intelligent, feature-rich code editing tailored to every aspect of PHP programming smart coding assistance, reliable refactorings, instant code navigation, built-in developer tools, PHP framework support, and more.

Help Symfony by sponsoring its development!

Documentation

Community

Contributing

Symfony is an Open Source, community-driven project with thousands of contributors. Join them contributing code or contributing documentation.

Security Issues

If you discover a security vulnerability within Symfony, please follow our disclosure procedure.

About Us

Symfony development is led by the Symfony Core Team and supported by Symfony contributors.

Description
⚠️ ARCHIVED: Original GitHub repository no longer exists. Preserved as backup on 2026-01-22T16:41:16.534Z
Readme MIT 484 MiB
Languages
PHP 98.1%
Twig 1.6%
CSS 0.1%