Входной массив Laravel, почему я получаю ноль в $ request-> gt;

После поиска похожих вопросов я так и не получил ошибку

Дело в том, что у меня есть форма, которая обычно работает, но у 10% пользователей есть эта ошибка

array_sum () ожидает, что параметр 1 будет массивом

форма

<select name="quantity[]" class="form-control option-quantity" data-price="100">
<option data-price="100" value="0">0</option>
<option data-price="101" value="1" selected="selected">1</option>
<option data-price="102" value="2">2</option>
</select>

контроллер

$validator = Validator::make($request->all(), [
'quantity.*' => 'required|integer',
]);

if ($validator->fails()) {
abort(500);
}

if(count($request->quantity) == 0 || array_sum($request->quantity) < 1)){
//message to select at least a quatity
}

Они всегда ставят сумму, потому что я не сделал ограничения, JS, чтобы избежать нуля или 0 и со стороны сервера, чтобы не допустить 0

Так что, как это иногда бывает, мне интересно, если некоторые исследователи делают что-то странное, меняя количество [] на количество, ноль или что-то еще, я немного схожу с ума и не могу воспроизвести ошибку самостоятельно, и это не не стоит ждать, пока ошибка произойдет с пользователем (:

Кстати, я могу добавить if($request->quantity) чтобы избежать ошибки, но это не решает вопрос о том, почему я иногда получаю нулевое значение, отдых в порядке.

Согласно предложению после выполнения dd($request->quantity); Я получил:

array:1 [
0 => "1"]

Но опять же, для меня это работает хорошо, а не на 10%.

0

Решение

Вы можете просто избежать этой ошибки, проверив количество.

 if($request->quantity){
if(count($request->quantity) == 0 || array_sum($request->quantity) < 1)){
//message to select at least a quatity
}
}

Это выбрасывает эту ошибку, потому что $request->quantity нулевой;

Надеюсь это поможет

0

Другие решения

Поскольку вы не отметили версию Laravel, я сделаю предположение, что вы используете последнюю версию.

почему я получаю ноль

Проверьте ваше правило проверки.

Когда пользователь отправляет данные с пустыми строками, Laravel делает их обнуляемыми. Оформить промежуточное ПО ConvertEmptyStringsToNull который находится внутри Illuminate\Foundation\Http\Middleware папка.

Поэтому, если вы хотите, чтобы они всегда присутствовали во время отправки пользовательских данных, сделайте это обязательным, например, так.

return [
'quantity' => 'required',
// .. other validation rules..
];

Надеюсь, что это помогает вам. Удачного кодирования. Приветствия.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector