Отображение только одного сообщения проверки для моего массива входных данных - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть форма, которая имеет 10 полей ввода, я хочу проверить, являются ли какие-либо из этих полей ввода пустыми. Если они пусты или содержат более 2 символов, я хочу отобразить только одно сообщение об ошибке. С моим текущим кодом я показываю ошибку для каждого поля, которое является пустым. Я не хочу, чтобы пользователь видел 10 сообщений об ошибках. Я пробовал много других методов, но, похоже, не работает.

Я хочу, чтобы в сообщении об ошибке говорилось: 'Прогнозы не могут быть пустыми или иметь более 2 символов'

Контроллер

 public function store(Request $request) {
        $requestData = $request->get('match');
        $this->validate($request, [
            'match.*.homeTeam' => 'required|max:2',
            'match.*.awayTeam' => 'required|max:2'
        ]);
         try {
            collect($requestData)
                ->each(function ($match, $key) {
                    Prediction::create([
                        'user_id'  => auth()->id(),
                        'match_id' => $key,
                        'homeTeam' => $match['homeTeamName'],
                        'awayTeam' => $match['awayTeamName'],
                        'homeScore'=> $match['homeTeam'],
                        'awayScore'=> $match['awayTeam'],
                        'result'   => false
                    ]);
            });
            auth()->user()->participated = true; 
            auth()->user()->addPoint();
            auth()->user()->save();

            return redirect('/predictions')->with('success', 'Weekly prediction created, new predictions can be made every Tuesday!');

         } catch(\Exception $e) {
            return view('error.error');
         }   

    }

Мой файл messages.blade.php

@if(count($errors) > 0)
@foreach($errors->all() as $error)
        <div class="alert alert-red">
            {{$error}}
        </div>
    @endforeach   
@endif

@if(session('success'))
    <div class="alert alert-green">
        {{session('success')}}
    </div>
@endif

@if(session('error'))
    <div class="alert alert-danger">
        {{session('error')}}
    </div>
@endif

Вид

@include('inc.messages')
{!! Form::open(['method'=> 'POST', 'action'=>'PredictionController@store']) !!}
@foreach($matches as $match)
  <tr>
      <td> <small style="opacity: 0.5; font-size: 10px;">{{$match->date->formatLocalized('%d %B %Y')}} <small></td>
      <td>{{$match->date->format('H:i')}}</td>
          {{Form::hidden('match[' . $match->match_id . '][homeTeamName]', $match->homeTeam )}}
          {{Form::hidden('match[' . $match->match_id . '][status]', $match->status )}}
      <td>{{$match->homeTeam}}</td>
      <td>{{$match->awayTeam}}</td>
          {{Form::hidden('match[' . $match->match_id . '][awayTeamName]', $match->awayTeam )}}
      <td style="width: 150px !important;"><div>{{Form::number('match[' . $match->match_id . '][homeTeam]' , '', [ 'class' =>'form-control-sm col col-sm-3'])}} <span class="ml-2" style="color: white;">-</span> {{Form::number('match[' . $match->match_id . '][awayTeam]' , '', ['class' =>'form-control-sm col col-sm-3 ml-2'])}} </div></td>                      
 </tr>
@endforeach
{{Form::button('Submit', ['type' =>'submit', 'class' => 'submit-btn float-right mb-3'])}} 
{!! Form::close() !!}

Какие-нибудь советы?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Я думаю, вы можете сделать что-то вроде этого:

@if($errors)
    <div class="alert alert-red">
        {{ $errors->first() }}
    </div>  
@endif

Если есть ошибки, показывать только первую.

0 голосов
/ 10 ноября 2018

validate() метод может принимать третий аргумент, определяющий сообщение об ошибке cusom.

Чтобы отобразить только одно настроенное сообщение об ошибке для любого сбоя проверки.

Вы можете сделать:

    $this->validate(
         $request, 
         [ 
            'match.*.homeTeam' => 'required|max:2',
            'match.*.awayTeam' => 'required|max:2'
         ],
         ['match.*' => "Predictions can't be empty or have more than 2 characters"]);
0 голосов
/ 10 ноября 2018

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

foreach ($errors->first('match.*') as $message) {
    //
}

Для получения дополнительной информации, см. Документацию Laravel по Проверка .

...