From aad9a38cac63d6080af728947ea3c092ad412fba Mon Sep 17 00:00:00 2001 From: Karim <30530408+uncrackable404@users.noreply.github.com> Date: Sun, 28 Apr 2024 17:00:11 +0200 Subject: [PATCH 1/3] Update CanBeValidated.php --- .../Components/Concerns/CanBeValidated.php | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/forms/src/Components/Concerns/CanBeValidated.php b/packages/forms/src/Components/Concerns/CanBeValidated.php index 55ad044372..9c1181c12f 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); } @@ -667,7 +676,16 @@ trait CanBeValidated if (is_numeric($rule)) { $rules[] = $this->evaluate($condition); } elseif ($this->evaluate($condition)) { - $rules[] = $this->evaluate($rule); + $evaluted = $this->evaluate($rule); + + if (is_array($evaluted)) { + $rules = [ + ...$rules, + ...$evaluted + ]; + } else { + $rules[] = $evaluted; + } } } From f7beeb91bccad1d34a6a77984a8e865cf93b3369 Mon Sep 17 00:00:00 2001 From: Karim <30530408+uncrackable404@users.noreply.github.com> Date: Sun, 28 Apr 2024 16:47:58 +0000 Subject: [PATCH 2/3] added closure support to forms method on CanBeValidated trait --- packages/forms/src/Components/Concerns/CanBeValidated.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/forms/src/Components/Concerns/CanBeValidated.php b/packages/forms/src/Components/Concerns/CanBeValidated.php index 9c1181c12f..29714ec4a1 100644 --- a/packages/forms/src/Components/Concerns/CanBeValidated.php +++ b/packages/forms/src/Components/Concerns/CanBeValidated.php @@ -676,15 +676,15 @@ trait CanBeValidated if (is_numeric($rule)) { $rules[] = $this->evaluate($condition); } elseif ($this->evaluate($condition)) { - $evaluted = $this->evaluate($rule); + $evaluated = $this->evaluate($rule); - if (is_array($evaluted)) { + if (is_array($evaluated)) { $rules = [ ...$rules, - ...$evaluted + ...$evaluated ]; } else { - $rules[] = $evaluted; + $rules[] = $evaluated; } } } From 8023015779f48fb931056a83add5d8ccf8e18228 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Mon, 29 Apr 2024 09:42:36 +0100 Subject: [PATCH 3/3] Update CanBeValidated.php --- .../Components/Concerns/CanBeValidated.php | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/forms/src/Components/Concerns/CanBeValidated.php b/packages/forms/src/Components/Concerns/CanBeValidated.php index 29714ec4a1..cd4a81f41e 100644 --- a/packages/forms/src/Components/Concerns/CanBeValidated.php +++ b/packages/forms/src/Components/Concerns/CanBeValidated.php @@ -675,18 +675,26 @@ trait CanBeValidated foreach ($this->rules as [$rule, $condition]) { if (is_numeric($rule)) { $rules[] = $this->evaluate($condition); - } elseif ($this->evaluate($condition)) { - $evaluated = $this->evaluate($rule); - if (is_array($evaluated)) { - $rules = [ - ...$rules, - ...$evaluated - ]; - } else { - $rules[] = $evaluated; - } + continue; } + + if (! $this->evaluate($condition)) { + continue; + } + + $rule = $this->evaluate($rule); + + if (is_array($rule)) { + $rules = [ + ...$rules, + ...$rule + ]; + + continue; + } + + $rules[] = $rule; } return $rules;