Почему мое сообщение об ошибке не отображается в Laravel - PullRequest
0 голосов
/ 10 июля 2019

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

Код, который работает:

<div class="form-group row">
    <label class="md-col-4 col-form-label text-md-right" for="slesson-date">Datum</label>
    <div class="col-md-6">
         <input id="slesson-date" class="form-control @error('date') is-invalid @enderror" type="date" name="date" required value="{{old('date', date('Y-m-d'))}}">

    @error('date')
           <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
           </span>
    @enderror
    </div>
</div>

Код, который не работает:

<div>
    <select name="code" class="selectpicker form-control" data-live-search="true" data-live-search-normalize="true" data-style="btn-secondary" title="Zoek een leerling">
        @foreach($students as $student)
            <option value={{$student->code}}>{{$student->name}}</option>
        @endforeach
    </select>
    @error('code') 
        <span class="invalid-feedback" role="alert"> 
            <strong>{{ $message }}</strong>
        </span> 
    @enderror
</div>

Оба поля ввода проверяются с помощью форм-запросов. Когда я показываю все ошибки в конце представления, ошибка отображается так, что она доступна, но по какой-то причине @error('code') не распознается.

Edit: Я добавил код контроллера в соответствии с запросом.

public function sLessonsStudent(ValidateSLessonStudent $request)
{
    $validated = $request->validated();

    $code = $validated['code'];
    $sLessons= SLesson::whereHas('studentProperty',function($query) use ($code){
        $query->where('user_code',$code);
    })->select('date','hour','classroom_number')->oldest('date')->orderBy('hour')->get();
    $user = User::where('code',$code)->first();
    $sLessonsJson = $sLessons->toJson();
    return view('sAdmin.sLessonsStudent',compact('sLessonsJson','user'));
}

И форма запроса, подтверждающего запрос:

class ValidateSLessonStudent extends FormRequest
{


/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'code'=>['required']
    ];
}

/**
 * {@inheritDoc}
 * @see \Illuminate\Foundation\Http\FormRequest::messages()
 */
public function messages()
{
    return [
        'code.required'=>'Er moet een leerling gekozen worden!'    
    ];
}
}

Обновление 2: Ошибка в ErrorBag

ViewErrorBag {#438
  #bags: array:1 [
    "default" => MessageBag {#439
      #messages: array:1 [
        "code" => array:1 [
          0 => "Er moet een leerling gekozen worden!"
        ]
      ]
      #format: ":message"
    }
  ]
}

1 Ответ

0 голосов
/ 18 июля 2019

После долгих проб и ошибок я обнаружил проблему. class "invalid-feedback" в следующем коде

@error('code') 
    <span class="invalid-feedback" role="alert"> 
        <strong>{{ $message }}</strong>
    </span> 
@enderror

должен предшествовать элемент управления формы с form-control @error('code') is-invalid @enderror". Это верно для рабочего кода, где input имеет обязательные классы, но не для второго кода, где select имеет только класс form-control, а не директиву добавления @error.

...