solotony
@solotony
покоряю пик Балмера

Почему пропадают Errors и Input если поле ввода больше 1000 символов?

Отправляю форму обычным способом post - обрабатываю ее, валидирую, при обнаружении ошибок делаю
back()->withErrors($validator)->withInput();

пока данных забито мало - все работает, при наличии ошибки форма открывается с ошибками и инпутом , но как только текстовом поле появляется ~1000 символов , то при наличии ошибки Errи Input пропадают, и форма девственно чистая ?

<form method="post" action="/cart/finish">
        @csrf

        <label><b>*</b> Ваше имя</label>
        <input class="form-control @error('name') is-invalid @enderror" name="name" value="{{old('name')}}">
        @error('name') <div class="invalid-feedback"> {{ $message }} </div> @enderror

        <label><b>*</b> Номер телефона</label>
        <input class="form-control @error('phone') is-invalid @enderror" name="phone" value="{{old('phone')}}">
        @error('phone') <div class="invalid-feedback"> {{ $message }} </div> @enderror

        <label><b>*</b> E-mail</label>
        <input class="form-control @error('email') is-invalid @enderror" name="email" value="{{old('email')}}">
        @error('email') <div class="invalid-feedback"> {{ $message }} </div> @enderror


        <label><b>*</b> Способ доставки</label>
        <select name="delivery_method" class="form-control @error('delivery_method') is-invalid @enderror">
            <option disabled selected></option>
            <option value="1" @if(old('delivery_method')===1) selected @endif>Самовывоз</option>
            <option value="2" @if(old('delivery_method')===2) selected @endif>Доставка курьером</option>
            <option value="3" @if(old('delivery_method')===3) selected @endif>Почта России</option>
            <option value="4" @if(old('delivery_method')===4) selected @endif>ТК "СДЭК" (До двери)</option>
            <option value="5" @if(old('delivery_method')===5) selected @endif>ТК "СДЭК" (до пункта выдачи)</option>
        </select>
        @error('delivery_method') <div class="invalid-feedback"> {{ $message }} </div> @enderror

        <label><b>*</b> Форма оплаты</label>
        <select name="payment_method" class="form-control @error('payment_method') is-invalid @enderror">
            <option disabled selected></option>
            <option value="1" @if(old('delivery_method')===1) selected @endif>Наличными при получении</option>
            <option value="2" @if(old('delivery_method')===2) selected @endif>На карту Сбербанка</option>
            <option value="3" @if(old('delivery_method')===3) selected @endif>Безналичная оплата по счету</option>
        </select>
        @error('payment_method') <div class="invalid-feedback"> {{ $message }} </div> @enderror


        <label>Адрес доставки</label>
        <textarea name="delivery_address" class="form-control @error('delivery_address') is-invalid @enderror">{{old('delivery_address')}}</textarea>
        @error('delivery_address') <div class="invalid-feedback"> {{ $message }} </div> @enderror


        <label>Комментарий к заказу</label>
        <textarea name="comment" class="form-control @error('comment') is-invalid @enderror">{{old('comment')}}</textarea>
        @error('comment') <div class="invalid-feedback"> {{ $message }} </div> @enderror
    </form>


это обработка формы

public function cart_finish(Request $request) {

        $validator = Validator::make($request->all(), [
            'name' => 'required|max:60',
            'phone' => 'required|max:20',
            'email' => 'required|email|max:60',
            'delivery_method' => 'required|integer',
            'payment_method' => 'required|integer',
            'delivery_address' => 'max:300',
            'comment' => 'max:300',
        ]);

        if ($validator->fails()) {
            return back()
                ->withErrors($validator)
                ->withInput();
        }


это вывод формы

public function cart_checkout(Request $request) {
        $cart = Order::getCart();
        return view('cart_checkout', [
            'website' => Website::instance(),
            'cart' => $cart
        ]);
    }
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
solotony
@solotony Автор вопроса
покоряю пик Балмера
проблема, как оказалось, в том что был установлен драйвер сессии cookie . после смены на file она уходит.

что собственно понятно, так как cookkie имеют ограничение на размер. лара не проверяет размер куков перед отправкой.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Была аналогичная проблема. Долго не мог понять, в чем дело, в итоге понял.
Дело тут не в количестве введенных знаков в поле ввода, а в количестве этих самых полей, которые не проходят валидацию.
Пример:
У меня было 11 полей. Все под валидатором. Если я не заполняю их все, то возвращаюсь назад без каких-либо упоминаний об ошибках. Т.е., $errors пустая. Если же начинаю уменьшать количество незаполненных полей, например до 6, то все работает нормально.
Почему так происходит?
Наверняка у тебя вывод ошибок русифицирован? Так вот, дело в том, что английские символы имеют размер 1 бит, а русские 2 (1 бит сам символ и 1 бит знак языка). Где-то, наверное, задано ограничение на размер этой переменной. Поэтому такая хрень и происходит.
Как я решил?
Строку в файле validation.php
'required' => 'Поле ":attribute" обязательно для заполнения.',

Сократил до
'required' => 'Заполни ":attribute"',

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

В общем, как-то так. Если найдешь решение, отпишись.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы