Replace `{id}` placeholder in rules with the model's key

This commit is contained in:
Toby Zerner 2021-09-05 17:23:36 +10:00
parent 7f73189f74
commit 6e2049afd5
1 changed files with 18 additions and 15 deletions

View File

@ -25,28 +25,31 @@ function rules($rules, array $messages = [], array $customAttributes = []): Clos
$rules = [$rules]; $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(); $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)) { if (! is_numeric($k)) {
$validationRules[$key.'.'.$k] = $v; $validatorRules[$key.'.'.$k] = $rule;
} else { } else {
$validationRules[$key][] = $v; $validatorRules[$key][] = $rule;
} }
} }
foreach ($messages as $k => $v) { $validation = Validator::make(
if (! is_numeric($k)) { $value !== null ? [$key => $value] : [],
$validationMessages[$key.'.'.$k] = $v; $validatorRules,
} else { $messages,
$validationMessages[$key][] = $v; $customAttributes
} );
}
$validation = Validator::make($value !== null ? [$key => $value] : [], $validationRules, $validationMessages, $customAttributes);
if ($validation->fails()) { if ($validation->fails()) {
foreach ($validation->errors()->all() as $message) { foreach ($validation->errors()->all() as $message) {