Bug #49624
Domain Model validators are executed twice
| Status: | Resolved | Start date: | 2013-07-03 | |
|---|---|---|---|---|
| Priority: | Must have | Due date: | ||
| Assigned To: | Bastian Waidelich | % Done: | 100%  | 
|
| Category: | Validation | |||
| Target version: | - | |||
| PHP Version: | Complexity: | |||
| Has patch: | No | Affected Flow version: | Flow 2.0.0 | 
Description
when having, for example, a 
/**
 * @param SampleDto $sampleDto {fq class name abridged}
 */
public function sampleAction(SampleDto $sampleDto);
	and an appropriate Validator for that model placed in Domain\Model\Validator\SampleDtoValidator (i.e. a Domain Model Validator in the sense of [‡]), the validation for it is fired twice on action invocation.
The argument's validator stack looks like the following then:
ConjunctionValidator:
    SampleDtoValidator
    ConjunctionValidator
        GenericObjectValidator
        SampleDtoValidator
	as you can see, the SampleDtoValidator is there twice, that's why it's executed twice.
If, however, the Validator is not a Domain Model Validator, means, it's not placed in Domain\Model\Validator; and annotated manually like
/**
 * @param SampleDto $sampleDto {fq class name abridged}
 * @Flow\Validate("$sampleDto", type="Acme\Foobar\Somewhere\SampleDtoValidator")
 */
public function sampleAction(SampleDto $sampleDto);
	...it's validated correctly only once.
The validator stack then looks like
ConjunctionValidator:
    SampleDtoValidator
    ConjunctionValidator
        GenericObjectValidator
	as you can see, the "inner" conjunction validator only has a GenericObjectValidator now.
Related issues
Associated revisions
[BUGFIX] Add domain model validators only once
If a domain model validator is present and a controller action accepts
this domain model as argument, the validator is added twice to the
validation tree.
It is added in ValidatorResolver::buildMethodArgumentsValidatorConjunctions()
and in ValidatorResolver::addCustomValidators() which is called from
ValidatorResolver::getBaseValidatorConjunction()
Both methods are called when building the validation tree in
ActionController::initializeActionMethodValidators()
Resolves: #49624
Releases: master, 2.1, 2.0
Change-Id: I1f8902d09f468177d580a7a3d949242cce78313e
[BUGFIX] Add domain model validators only once
If a domain model validator is present and a controller action accepts
this domain model as argument, the validator is added twice to the
validation tree.
It is added in ValidatorResolver::buildMethodArgumentsValidatorConjunctions()
and in ValidatorResolver::addCustomValidators() which is called from
ValidatorResolver::getBaseValidatorConjunction()
Both methods are called when building the validation tree in
ActionController::initializeActionMethodValidators()
Resolves: #49624
Releases: master, 2.2, 2.1
Change-Id: I1f8902d09f468177d580a7a3d949242cce78313e
[BUGFIX] Add domain model validators only once
If a domain model validator is present and a controller action accepts
this domain model as argument, the validator is added twice to the
validation tree.
It is added in ValidatorResolver::buildMethodArgumentsValidatorConjunctions()
and in ValidatorResolver::addCustomValidators() which is called from
ValidatorResolver::getBaseValidatorConjunction()
Both methods are called when building the validation tree in
ActionController::initializeActionMethodValidators()
Resolves: #49624
Releases: master, 2.2, 2.1
Change-Id: I1f8902d09f468177d580a7a3d949242cce78313e
History
#1 Updated by Karsten Dambekalns almost 2 years ago
- Category set to Validation
 
#2 Updated by Bastian Waidelich almost 2 years ago
- Status changed from New to Accepted
 - Assigned To set to Bastian Waidelich
 - Affected Flow version changed from Git master to Flow 2.0.0
 
This might be related to #50585
#3 Updated by Helmut Hummel almost 2 years ago
Bastian Waidelich wrote:
This might be related to #50585
I think that is something different.
The issue in this case is, that
ValidatorResolver->buildMethodArgumentsValidatorConjunctions()adds a domain model validator if present and
ValidatorResolver->buildBaseValidatorConjunction()calls
ValidatorResolver->addCustomValidators()which also adds a domain model validator if the class is found.
I suggest to remove the according code from
buildMethodArgumentsValidatorConjunctions
#4 Updated by Gerrit Code Review almost 2 years ago
- Status changed from Accepted to Under Review
 
Patch set 1 for branch master has been pushed to the review server.
It is available at https://review.typo3.org/24174
#5 Updated by Gerrit Code Review almost 2 years ago
Patch set 2 for branch master has been pushed to the review server.
It is available at https://review.typo3.org/24174
#6 Updated by Gerrit Code Review almost 2 years ago
Patch set 3 for branch master has been pushed to the review server.
It is available at https://review.typo3.org/24174
#7 Updated by Markus Klein almost 2 years ago
Also an issue in TYPO3 CMS Extbase!!
#8 Updated by Gerrit Code Review over 1 year ago
Patch set 4 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at https://review.typo3.org/24174
#9 Updated by Gerrit Code Review over 1 year ago
Patch set 5 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at https://review.typo3.org/24174
#10 Updated by Gerrit Code Review 11 months ago
Patch set 6 for branch master of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at http://review.typo3.org/24174
#11 Updated by Gerrit Code Review 11 months ago
Patch set 1 for branch 2.2 of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at http://review.typo3.org/32437
#12 Updated by Gerrit Code Review 11 months ago
Patch set 1 for branch 2.1 of project Packages/TYPO3.Flow has been pushed to the review server.
It is available at http://review.typo3.org/32438
#13 Updated by Helmut Hummel 11 months ago
- Status changed from Under Review to Resolved
 - % Done changed from 0 to 100
 
Applied in changeset b1633ad8af5b19c63a1fc4c815b6f079ba27485d.