Fix required field asterisk on array of rules for field #5792
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.
WHY
BEFORE - What was wrong? What was happening before this PR?
When using the
crud->setValidation
helper with a request class or ruleset, where properties have an array of rules applied to them, the field would only be marked as 'required' if the first element of the ruleset would be required, rather than any of them.This is caused by the 'outer' loop variable
$key
being overwritten inside the loop, causing it to befalse
after the first (mismatched) iteration.AFTER - What is happening after this PR?
The field is correctly marked as required if there is any required rule in its rule array.
HOW
How did you achieve that, in technical terms?
By using a separate variable name for listing the field, we ensure
$key
will always be the original fieldname.I also immediately break the loop if a field is found to be required for a slight performance benefit.
Finally I've also updated all the related tests slightly to ensure they contain a non-required field,
to ensure tests also check for false positives.
Is it a breaking change?
No
How can we test the before & after?
See added test: when running the first commit (new test + no fix) tests fail; then the test is fixed by the commit after