为什么我的错误信息没有显示在 Laravel
Why is my errormessage not showing in Laravel
我的表单上有一个 select 输入,当用户没有 select 一个值时,我想显示一个错误。由于某种原因,错误没有显示,尽管几乎相同的代码在另一个表单上显示。
有效代码:
<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>
两个输入字段都使用 formrequests 进行验证。
当我在视图末尾显示所有错误时,会显示错误,因此它可用,只是由于某种原因无法被 @error('code')
识别。
编辑:
我根据要求添加了控制器代码。
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"
}
]
}
经过长时间的反复试验,我发现了问题所在。
下面代码中的class "invalid-feedback"
@error('code')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
需要在带有 form-control @error('code') is-invalid @enderror"
的表单控件之前。这对于 input
具有所需的 class 的工作代码是正确的,但对于 select
只有 class form-control
的第二个代码则不然而不是添加 @error
指令。
在class中加入"d-block"即可解决问题:
@error('code')
<span class="invalid-feedback d-block" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
我的表单上有一个 select 输入,当用户没有 select 一个值时,我想显示一个错误。由于某种原因,错误没有显示,尽管几乎相同的代码在另一个表单上显示。
有效代码:
<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>
两个输入字段都使用 formrequests 进行验证。
当我在视图末尾显示所有错误时,会显示错误,因此它可用,只是由于某种原因无法被 @error('code')
识别。
编辑: 我根据要求添加了控制器代码。
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"
}
]
}
经过长时间的反复试验,我发现了问题所在。
下面代码中的class "invalid-feedback"
@error('code')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
需要在带有 form-control @error('code') is-invalid @enderror"
的表单控件之前。这对于 input
具有所需的 class 的工作代码是正确的,但对于 select
只有 class form-control
的第二个代码则不然而不是添加 @error
指令。
在class中加入"d-block"即可解决问题:
@error('code')
<span class="invalid-feedback d-block" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror