solotony
@solotony
code for food, caviar preferably

Почему пропадают 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
        ]);
    }
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
solotony
@solotony Автор вопроса
code for food, caviar preferably
проблема, как оказалось, в том что был установлен драйвер сессии cookie . после смены на file она уходит.

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

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

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

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

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

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