#[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]`
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
- Install Symfony with Composer (see requirements details).
- Symfony follows the semantic versioning strictly, publishes "Long Term Support" (LTS) versions and has a release process that is predictable and business-friendly.
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
- Read the Getting Started guide if you are new to Symfony.
- Try the Symfony Demo application to learn Symfony in practice.
- Discover Symfony ecosystem in detail with Symfony The Fast Track.
- Master Symfony with the Guides and Tutorials, the Components docs and the Best Practices reference.
Community
- Join the Symfony Community and meet other members at the Symfony events.
- Get Symfony support on GitHub Discussions, Slack, etc.
- Follow us on GitHub, Twitter and Facebook.
- Read our Code of Conduct and meet the CARE Team.
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.