diff --git a/packages/forms/src/Components/Concerns/CanBeValidated.php b/packages/forms/src/Components/Concerns/CanBeValidated.php index 55ad044372..cd4a81f41e 100644 --- a/packages/forms/src/Components/Concerns/CanBeValidated.php +++ b/packages/forms/src/Components/Concerns/CanBeValidated.php @@ -426,10 +426,19 @@ trait CanBeValidated } /** - * @param string | array $rules + * @param string | array | Closure $rules */ - public function rules(string | array $rules, bool | Closure $condition = true): static + public function rules(string | array | Closure $rules, bool | Closure $condition = true): static { + if ($rules instanceof Closure) { + $this->rules = [ + ...$this->rules, + [$rules, $condition] + ]; + + return $this; + } + if (is_string($rules)) { $rules = explode('|', $rules); } @@ -666,9 +675,26 @@ trait CanBeValidated foreach ($this->rules as [$rule, $condition]) { if (is_numeric($rule)) { $rules[] = $this->evaluate($condition); - } elseif ($this->evaluate($condition)) { - $rules[] = $this->evaluate($rule); + + continue; } + + if (! $this->evaluate($condition)) { + continue; + } + + $rule = $this->evaluate($rule); + + if (is_array($rule)) { + $rules = [ + ...$rules, + ...$rule + ]; + + continue; + } + + $rules[] = $rule; } return $rules;