Laravel Проверка чисел c многомерный массив - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу выдать сообщение об ошибке, если строка введена в целочисленное поле ввода с многомерным массивом.

Просмотр:

<div class="col-md-8">
     <input name="answer[sleep][score]" type="text" class="form-control @error('answer[sleep][score]') @enderror" placeholder="Score" value="{{ @$answer_array['sleep']['score'] }}">
     @error('answer[sleep][score]')
     <span class="invalid-feedback" role="alert">
         <strong>Geen letters alsjeblieft.?</strong>
     </span>
     @enderror
     </div>

Контроллер:

        $request->validate([
            'answer.sleep.score' => 'nullable|numeric',
        ]);

когда я нажимаю сохранить, он просто обновляет страницу и ничего не делает. Может кто-нибудь, пожалуйста, помогите мне, как я могу показать ошибку в многомерном массиве.

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

@error - это директива blade-сервера, используемая для отображения сообщений об ошибках в вашем шаблоне. Правильный способ его использования:

@error('answer.sleep.score')
  <div>{{ $message }}</div>
@enderror

Обратите внимание, что для определения того, существует ли сообщение об ошибке, я использую тот же формат, который вы использовали при проверке, то есть answer.sleep.score и НЕ answer[sleep][score].

Если вы хотите добавить класс к элементу ввода при обнаружении ошибки, вы можете сделать это:

<input name="answer[sleep][score]" type="text" class="form-control {{ $errors->has('answer.sleep.score') ? 'error-class' : '' }}" placeholder="Score" value="{{ old('answer.sleep.score') }}">

Используя old, Вы можете предварительно заполнить поле ввода опубликованным значением.

0 голосов
/ 23 апреля 2020

Вы можете использовать регулярное выражение для проверки, будет намного лучше, чем это:

$request->validate([
   'answer.sleep.score' => 'nullable|regex:/^[0-9]*$/',
]);

Это позволит вам вводить только поля в поле.

...