From 6e2049afd50072187837dbbff9b0df928be7c142 Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Sun, 5 Sep 2021 17:23:36 +1000 Subject: [PATCH] Replace `{id}` placeholder in rules with the model's key --- src/functions_laravel.php | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/functions_laravel.php b/src/functions_laravel.php index 70b0e0a..23d4c21 100644 --- a/src/functions_laravel.php +++ b/src/functions_laravel.php @@ -25,28 +25,31 @@ function rules($rules, array $messages = [], array $customAttributes = []): Clos $rules = [$rules]; } - return function (callable $fail, $value, $model, Context $context, Field $field) use ($rules, $messages, $customAttributes) { + return function (callable $fail, $value, Model $model, Context $context, Field $field) use ( + $rules, + $messages, + $customAttributes + ) { $key = $field->getName(); - $validationRules = [$key => []]; - $validationMessages = [$key => []]; - foreach ($rules as $k => $v) { + $validatorRules = [$key => []]; + + foreach ($rules as $k => $rule) { + $rule = str_replace('{id}', $model->getKey(), $rule); + if (! is_numeric($k)) { - $validationRules[$key.'.'.$k] = $v; + $validatorRules[$key.'.'.$k] = $rule; } else { - $validationRules[$key][] = $v; + $validatorRules[$key][] = $rule; } } - foreach ($messages as $k => $v) { - if (! is_numeric($k)) { - $validationMessages[$key.'.'.$k] = $v; - } else { - $validationMessages[$key][] = $v; - } - } - - $validation = Validator::make($value !== null ? [$key => $value] : [], $validationRules, $validationMessages, $customAttributes); + $validation = Validator::make( + $value !== null ? [$key => $value] : [], + $validatorRules, + $messages, + $customAttributes + ); if ($validation->fails()) { foreach ($validation->errors()->all() as $message) {