[Validator] Add the fields option to the Unique constraint#16713
Merged
wouterj merged 1 commit intosymfony:6.1from May 1, 2022
Merged
[Validator] Add the fields option to the Unique constraint#16713wouterj merged 1 commit intosymfony:6.1from
wouterj merged 1 commit intosymfony:6.1from
Conversation
Collaborator
|
It looks like you unchecked the "Allow edits from maintainer" box. That is fine, but please note that if you have multiple commits, you'll need to squash your commits into one before this can be merged. Or, you can check the "Allow edits from maintainers" box and the maintainer can squash for you. Cheers! Carsonbot |
This was referenced Apr 13, 2022
fabpot
added a commit
to symfony/symfony
that referenced
this pull request
Apr 14, 2022
…cked for uniqueness (wkania) This PR was squashed before being merged into the 6.1 branch. Discussion ---------- [Validator] Define which collection keys should be checked for uniqueness | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | Fix #9888 | License | MIT | Doc PR | symfony/symfony-docs#16713 Currently, the validator checks each element of the collection as a whole. We already have a custom normalizer (which is great), but it would be nice to be able to check for uniqueness certain [collection](https://symfony.com/doc/current/reference/constraints/Collection.html) keys. For example, some fields in the collection element can be identifiers. They should be unique within the collection, even when the rest of the element data are different. Current state: - validates that all the elements of the given collection are unique New state: - preserve the current state, - all old tests pass (no changes in them), - no breaking changes, - define which collection fields should be checked for uniqueness (optional), - fields are optional in each element of the collection. Use [collection constraints](https://symfony.com/doc/current/reference/constraints/Collection.html) if they are required Examples: 1. Basic example. Each translation of the same resource must be in a different language. ```php use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Count(min=1), * @Assert\Unique(fields={"language"}), * @Assert\Collection( * fields = { * "language" = { * @Assert\NotBlank, * @Assert\Length(min = 2, max = 2), * @Assert\Language * }, * "title" = { * @Assert\NotBlank, * @Assert\Length(max = 255) * }, * "description" = { * @Assert\NotBlank, * @Assert\Length(max = 255) * } * } * ) */ public array $translations = []; ``` 2. An example where Optional is recognizable. Items with the id are changed and without are new. ```php use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints\Optional; /** * @Assert\Unique(fields={"id"}), * @Assert\Collection( * fields = { * "id" = @Assert\Optional({ * @Assert\Uuid * }), * "name" = { * @Assert\NotBlank, * @Assert\Length(max = 255) * } * } * ) */ public array $items = []; ``` 3. An example with composite uniqueness ```php use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Unique(fields={"latitude", "longitude"}), * @Assert\Collection( * fields = { * "latitude" = { * @Assert\NotBlank * }, * "longitude" = { * @Assert\NotBlank * }, * "poi" = { * @Assert\Length(max = 255) * } * } * ) */ public array $coordinates = []; ``` Commits ------- 0e8f4ce [Validator] Define which collection keys should be checked for uniqueness
symfony-splitter
pushed a commit
to symfony/validator
that referenced
this pull request
Apr 14, 2022
…cked for uniqueness (wkania) This PR was squashed before being merged into the 6.1 branch. Discussion ---------- [Validator] Define which collection keys should be checked for uniqueness | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | Fix #9888 | License | MIT | Doc PR | symfony/symfony-docs#16713 Currently, the validator checks each element of the collection as a whole. We already have a custom normalizer (which is great), but it would be nice to be able to check for uniqueness certain [collection](https://symfony.com/doc/current/reference/constraints/Collection.html) keys. For example, some fields in the collection element can be identifiers. They should be unique within the collection, even when the rest of the element data are different. Current state: - validates that all the elements of the given collection are unique New state: - preserve the current state, - all old tests pass (no changes in them), - no breaking changes, - define which collection fields should be checked for uniqueness (optional), - fields are optional in each element of the collection. Use [collection constraints](https://symfony.com/doc/current/reference/constraints/Collection.html) if they are required Examples: 1. Basic example. Each translation of the same resource must be in a different language. ```php use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Count(min=1), * @Assert\Unique(fields={"language"}), * @Assert\Collection( * fields = { * "language" = { * @Assert\NotBlank, * @Assert\Length(min = 2, max = 2), * @Assert\Language * }, * "title" = { * @Assert\NotBlank, * @Assert\Length(max = 255) * }, * "description" = { * @Assert\NotBlank, * @Assert\Length(max = 255) * } * } * ) */ public array $translations = []; ``` 2. An example where Optional is recognizable. Items with the id are changed and without are new. ```php use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints\Optional; /** * @Assert\Unique(fields={"id"}), * @Assert\Collection( * fields = { * "id" = @Assert\Optional({ * @Assert\Uuid * }), * "name" = { * @Assert\NotBlank, * @Assert\Length(max = 255) * } * } * ) */ public array $items = []; ``` 3. An example with composite uniqueness ```php use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Unique(fields={"latitude", "longitude"}), * @Assert\Collection( * fields = { * "latitude" = { * @Assert\NotBlank * }, * "longitude" = { * @Assert\NotBlank * }, * "poi" = { * @Assert\Length(max = 255) * } * } * ) */ public array $coordinates = []; ``` Commits ------- 0e8f4cefdb [Validator] Define which collection keys should be checked for uniqueness
Contributor
Author
|
The feature was merged. use Symfony\Component\Validator\Constraints as Assert;
/**
* @Assert\Unique(fields={"latitude", "longitude"}),
* @Assert\Collection(
* fields = {
* "latitude" = {
* @Assert\NotBlank
* },
* "longitude" = {
* @Assert\NotBlank
* },
* "poi" = {
* @Assert\Length(max = 255)
* }
* }
* )
*/
public array $coordinates = []; |
Member
javiereguiluz
added a commit
that referenced
this pull request
May 3, 2022
This PR was merged into the 6.1 branch. Discussion ---------- [Validator] Fix typo in the Unique constraint `@wouterj` just a small fix related to the #16713 (comment) Commits ------- 3fd53b9 Fix typo in the Unique constraint
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Maybe I will add an example of use.