【问题标题】:Custom error messages for html form elements with array names in LaravelLaravel 中带有数组名称的 html 表单元素的自定义错误消息
【发布时间】:2020-10-19 02:13:39
【问题描述】:

我无法在表单中显示自定义 perr 字段验证错误消息。非常感谢帮助解决此问题。

我经常使用 Laravel 验证,因此了解其中的原理,但我目前遇到的问题是为名称为数组的 html 元素显示自定义消息。

我有“组”字段,单击按钮即可复制这些字段。每个集合都是使用递增的索引值创建的,它将一个集合与另一个集合区分开来:

<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 类:

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]

.. 这不是显示在无效字段下方的个性化自定义错误。

任何解决此问题的帮助将不胜感激。提前谢谢你。

【问题讨论】:

    标签: php laravel validation laravel-6 validationerror


    【解决方案1】:

    你可以这样做

    @error('form_fields.2.surname')
     <div class="alert alert-danger">{{ $message }}</div>
    @enderror
    

    【讨论】:

    • 感谢@zeref,为我解决了这个问题。也许这应该添加到 Laravel 文档中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2015-10-02
    • 2018-08-12
    • 2014-10-01
    • 2011-03-15
    • 2015-11-29
    • 2017-05-04
    相关资源
    最近更新 更多