|
@@ -101,7 +101,7 @@ final class Validator
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return $this->ruleMatches($field['required_if'], $data);
|
|
|
|
|
|
|
+ return $this->evaluateCondition($field['required_if'], $data);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** @param array<string, mixed> $field */
|
|
/** @param array<string, mixed> $field */
|
|
@@ -111,30 +111,19 @@ final class Validator
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return $this->ruleMatches($field['visible_if'], $data);
|
|
|
|
|
|
|
+ return $this->evaluateCondition($field['visible_if'], $data);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /** @param array<string, mixed> $rule */
|
|
|
|
|
- private function ruleMatches(array $rule, array $data): bool
|
|
|
|
|
|
|
+ public function evaluateCondition(array $rule, array $data): bool
|
|
|
{
|
|
{
|
|
|
$sourceField = (string) ($rule['field'] ?? '');
|
|
$sourceField = (string) ($rule['field'] ?? '');
|
|
|
|
|
+ $equals = (string) ($rule['equals'] ?? '');
|
|
|
|
|
|
|
|
if ($sourceField === '') {
|
|
if ($sourceField === '') {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $actualValue = $this->resolveRuleValue($sourceField, $data);
|
|
|
|
|
-
|
|
|
|
|
- if (isset($rule['equals'])) {
|
|
|
|
|
- return $actualValue === (string) $rule['equals'];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (isset($rule['in']) && is_array($rule['in'])) {
|
|
|
|
|
- $inValues = array_map(static fn($v) => (string) $v, $rule['in']);
|
|
|
|
|
- return in_array($actualValue, $inValues, true);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ return $this->resolveRuleValue($sourceField, $data) === $equals;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** @param array<string, mixed> $data */
|
|
/** @param array<string, mixed> $data */
|
|
@@ -190,11 +179,11 @@ final class Validator
|
|
|
/** @param array<string, mixed> $option */
|
|
/** @param array<string, mixed> $option */
|
|
|
private function isOptionVisible(array $option, array $data): bool
|
|
private function isOptionVisible(array $option, array $data): bool
|
|
|
{
|
|
{
|
|
|
- if (isset($option['visible_if']) && is_array($option['visible_if']) && !$this->ruleMatches($option['visible_if'], $data)) {
|
|
|
|
|
|
|
+ if (isset($option['visible_if']) && is_array($option['visible_if']) && !$this->evaluateCondition($option['visible_if'], $data)) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (isset($option['hidden_if']) && is_array($option['hidden_if']) && $this->ruleMatches($option['hidden_if'], $data)) {
|
|
|
|
|
|
|
+ if (isset($option['hidden_if']) && is_array($option['hidden_if']) && $this->evaluateCondition($option['hidden_if'], $data)) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|