Laravel Validator не работает из-за преобразования массива в строку
Я пытаюсь проверить этот вход:
$values = [
'id' => $input['id'][$i],
'template_id' => $input['template_id'][$i],
'schedulable_id' => $id,
'schedulable_type' => $type,
'order_by' => $i
];
Против этих правил, найденных в моем классе Расписание:
public static $rules = [
'template_id' => 'required|integer|exists:templates,id',
'schedulable_id' => 'required|integer',
'schedulable_type' => 'required|in:Item,Order',
'order_by' => 'integer'
];
Когда я делаю следующее, я всегда получаю ошибку преобразования массива в строку в "/laravel/vendor/laravel/framework/src/Illuminate/Validation/Validator.php" в строке 905:
$validator = Validator::make($values, Schedule::$rules);
if ($validator->fails()) {
$errors[$i] = $validator->messages();
continue;
}
Почему это происходит?
1 ответ
Решение
Просто обнаружил, что у меня был Ardent's $forceEntityHydrationFromInput = true
и мой вклад не может быть получен непосредственно из Input
для целей проверки из-за того, что он представлен в виде массива частично ссылочных значений.
Чтобы это исправить, измените на $forceEntityHydrationFromInput = false
и использовать стандартную процедуру проверки ввода вместо того, чтобы полагаться на магию Ардента.
Иногда умные пакеты слишком умны.