html 表单元素的自定义错误消息,数组名称在 Laravel 中
Custom error messages for html form elements with array names in Laravel
我无法让自定义 perr-field 验证错误消息显示在我的表单中。非常感谢帮助解决这个问题。
我经常使用 Laravel 验证,因此理解原理,但我目前遇到的问题是为具有名称的 html 元素显示自定义消息那是一个数组。
我有 'sets' 个字段,单击按钮即可复制这些字段。每个集合都是使用递增的索引值创建的,它将一组与另一组区分开来:
<div id="divSet1">
<input type='text'
class="form-control @error('form_fields[1][surname]') is-invalid @enderror"
id="form_fields_1_surname" name="form_fields[1][surname]" />
@error('form_fields[1][surname]')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
.
.
. more fields here
.
.
</div>
<div id="divSet2">
<input type='text'
class="form-control @error('form_fields[2][surname]') is-invalid @enderror"
id="form_fields_2_surname" name="form_fields[2][surname]" />
@error('form_fields[2][surname]')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
.
.
. more fields here
.
.
</div>
FormRequest class:
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;
/**
* Application form request
*
* @category controllers
* @sub-category validation
*/
class FormRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'form_fields.*.surname' => 'required',
];
}
/**
* Get the error messages for the defined validation rules
*
* @return array
*/
public function messages()
{
return [
'form_fields.*.surname.required' => 'Please supply a surname',
];
}
}
当我提交表单时,我没有看到失败的姓氏字段的自定义错误消息。这些字段甚至没有以红色突出显示。
但是,如果我添加 Laravel 文档 (https://laravel.com/docs/6.x/validation#quick-displaying-the-validation-errors) 中提供的验证错误消息常规横幅,则会报告缺少姓氏:
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
虽然这有效并且确实会报告页面顶部缺少的姓氏,但没有自定义消息:
* Please supply a surname // <-- form_fields[1][surname]
* Please supply a surname // <-- form_fields[2][surname]
..这不是显示在无效字段下方的个性化自定义错误。
如能帮助解决此问题,我们将不胜感激。提前谢谢你。
你可以这样做
@error('form_fields.2.surname')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
我无法让自定义 perr-field 验证错误消息显示在我的表单中。非常感谢帮助解决这个问题。
我经常使用 Laravel 验证,因此理解原理,但我目前遇到的问题是为具有名称的 html 元素显示自定义消息那是一个数组。
我有 'sets' 个字段,单击按钮即可复制这些字段。每个集合都是使用递增的索引值创建的,它将一组与另一组区分开来:
<div id="divSet1">
<input type='text'
class="form-control @error('form_fields[1][surname]') is-invalid @enderror"
id="form_fields_1_surname" name="form_fields[1][surname]" />
@error('form_fields[1][surname]')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
.
.
. more fields here
.
.
</div>
<div id="divSet2">
<input type='text'
class="form-control @error('form_fields[2][surname]') is-invalid @enderror"
id="form_fields_2_surname" name="form_fields[2][surname]" />
@error('form_fields[2][surname]')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
.
.
. more fields here
.
.
</div>
FormRequest class:
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;
/**
* Application form request
*
* @category controllers
* @sub-category validation
*/
class FormRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'form_fields.*.surname' => 'required',
];
}
/**
* Get the error messages for the defined validation rules
*
* @return array
*/
public function messages()
{
return [
'form_fields.*.surname.required' => 'Please supply a surname',
];
}
}
当我提交表单时,我没有看到失败的姓氏字段的自定义错误消息。这些字段甚至没有以红色突出显示。
但是,如果我添加 Laravel 文档 (https://laravel.com/docs/6.x/validation#quick-displaying-the-validation-errors) 中提供的验证错误消息常规横幅,则会报告缺少姓氏:
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
虽然这有效并且确实会报告页面顶部缺少的姓氏,但没有自定义消息:
* Please supply a surname // <-- form_fields[1][surname]
* Please supply a surname // <-- form_fields[2][surname]
..这不是显示在无效字段下方的个性化自定义错误。
如能帮助解决此问题,我们将不胜感激。提前谢谢你。
你可以这样做
@error('form_fields.2.surname')
<div class="alert alert-danger">{{ $message }}</div>
@enderror