validation - Laravel 5 FormRequest 数组输入的自定义消息

标签 validation laravel laravel-5

我有一个表单输入,其中包含 email 字段、email_confirmation 字段,然后是 fname- 和 lname-可以使用 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)定义的,但我的输入数组属性也由点组成......

最佳答案

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

$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.';

关于validation - Laravel 5 FormRequest 数组输入的自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901648/

相关文章:

python - 正则表达式可以正常工作,但在放入 XML 模式时会失败

java - 有没有像 Schematics (Python) for Java 这样的工具?

php - Laravel:如何在相关模型中添加复合键(2 列或更多列)作为 $primaryKey?

php - 如何解决 PHP ACF 错误 : "Trying to access array offset on value of type bool"?

php - 使用 $input->all() 而不是 Input::all() Laravel-5

php - 在 Laravel 生产中完全禁用错误报告?

php - 使用 AWS PHP SDK 将 'Payload' 传递给 AWS Lambda 函数

Java:针对包含另一个 xsd 的 xsd 进行字符串 xml 验证

php - Zend Framework 2 - 使用验证器构建简单的表单

php - Laravel: Eloquent 地返回一个我无法迭代的对象