【问题标题】:Laravel 5 FormRequest custom message for array inputLaravel 5 FormRequest 用于数组输入的自定义消息
【发布时间】:2015-05-08 05:26:53
【问题描述】:

我有一个带有 email-field、email_confirmation-field 和 fname- 和 lname-fields 的表单输入,可以使用 javascript 克隆,因此可以添加多个名称。

因此,输入变量分别命名为 emailemail_confirmationpersons[0][fname] + persons[0][lname](如果提供了多个名称,则索引 0 递增)。

我正在尝试为数组输入设置自定义验证消息:

RegisterRequest.php

public function rules()
{
    $rules = array();
    foreach ($this->input('persons') as $index => $person) {
        $fname = 'persons.' . $index . '.fname';
        $lname = 'persons.' . $index . '.lname';
        $rules[$fname] = 'sometimes|required_with:'.$lname.'|max:25';
        $rules[$lname] = 'sometimes|required_with:'.$fname.'|max:35';
    }
    return array_merge([
        'email' => 'required|confirmed|email',
        'email_confirmation' => 'required',
    ], $rules);
}

public function messages()
{
    $array = array(
        'email.required' => 'Je e-mailadres is verplicht.',
        'email.email' => 'Dit is geen geldig e-mailadres',
        'email.confirmed' => 'E-mailadressen komen niet overeen.',
        'email_confirmation.required' => 'Bevestig je e-mailadres.',
    );
    foreach ($this->input('persons') as $index => $person) {
        $fname = 'persons.' . $index . '.fname';
        $lname = 'persons.' . $index . '.lname';
        $array[$fname.'.max:25'] = 'Je kan maximaal 25 karakters ingeven.';
        $array[$lname.'.max:35'] = 'Je kan maximaal 35 karakters ingeven.';
        $array[$fname.'.required_with:' . $lname] = 'Vul de voornaam in.';
        $array[$lname.'.required_with:' .$fname] = 'Vul de achternaam in.';
    }
    return $array;
}

电子邮件错误消息正在正确显示,但不幸的是输入数组的消息没有......有什么想法可以实现这一点吗?我认为问题在于验证消息是使用点规则(attribute.rule)定义的,但我的输入数组属性也由点组成......

【问题讨论】:

    标签: validation laravel laravel-5


    【解决方案1】:

    对于自定义消息,您没有使用参数指定实际的验证规则。只是它的名字:

    $array[$fname.'.max'] = 'Je kan maximaal 25 karakters ingeven.';
    $array[$lname.'.max'] = 'Je kan maximaal 35 karakters ingeven.';
    $array[$fname.'.required_with'] = 'Vul de voornaam in.';
    $array[$lname.'.required_with'] = 'Vul de achternaam in.';
    

    对于max 验证,您可以在消息中使用:max 占位符来检索传递给规则的数字:

    $array[$fname.'.max'] = 'Je kan maximaal :max karakters ingeven.';
    $array[$lname.'.max'] = 'Je kan maximaal :max karakters ingeven.';
    

    【讨论】:

    • 不知道会是 this 简单.. :) 我显然忽略了参数!感谢您的快速回复!
    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2023-01-09
    • 2018-09-22
    • 2015-10-04
    • 2020-10-08
    • 2017-11-19
    相关资源
    最近更新 更多