繁体   English   中英

如何在 Laravel 表单验证错误消息中给出自定义字段名称

[英]How to give custom field name in laravel form validation error message

我正在 Laravel 中尝试表单验证。 我的表单中有一个名为“Category”的输入文本字段,我的字段名称为“cat”。

我定义了这样的验证规则。

public static $rules=array(
         "name"=>"required|min:3",
          "cat"=>"required"
           );

当验证失败时,我收到这样的错误消息

The name field is required.
The cat field is required.

但我想将其显示为“类别字段是必需的”而不是“猫”。
如何在错误消息中将“cat”更改为“Category”?

您可以为您的字段指定自定义错误消息,如下所示。

$messages = array(
    'cat.required' => 'The category field is required.',
);

$validator = Validator::make($input, $rules, $messages);

有关更多信息,请参阅laravel 文档中的自定义错误消息部分

或者您可以为您的字段名称保留映射,如下所示。 你可以将这些设置到你的验证器中。 因此,您可以看到描述性名称而不是真实的字段名称。

$attributeNames = array(
   'name' => 'Name',
   'cat' => 'Category',     
);

$validator = Validator::make ( Input::all (), $rules );
$validator->setAttributeNames($attributeNames);

您可以自定义每条消息,还可以更改validation.php (resources/lang/en/) 中的属性字段名称。 用于在validation.php 中设置属性

'attributes' => [
   'name' => 'Name',
   'cat' => 'Category',
   'field_name'=>'your attribute'
],

我正在使用它来处理表单中的动态行添加。 此答案是在管理较大表单的上下文中提供的。 这个答案适用于Laravel 5

表单请求

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Response;

class SomeThingFormRequest extends Request {

public function authorize()
{
 //be nice
}

public function rules()
{
//my loop building an array of rules ex: $rules['thing.attribute.'.$x]
}

public function attributes()
{
    return [
        'thing.attribute'.$x => 'Nice Name',
    ];
}

如果您正在使用 Laravel 5,希望这有助于引导您朝着正确的方向前进。我目前正在对其进行测试。 关于这种潜力的文件似乎有误?

我在框架 (Illuminate\\Foundation\\Http\\FormRequest.php) 和 (Illuminate\\Validation\\Validator.php) 中挖掘了一些线索。

这是一个替代 $this->validate(request(), [rules], [custom messages], [Custom attribute name]);

            $this->validate(request(), [
                'fname' => "required|alpha_dash|max:20",
                'lname' => "required|alpha_dash|max:30",
                'extensionName' => "required|alpha_dash|max:20",
                'specialization' => "max:100",
                'subSpecialization' => "max:100"
            ], [], 
            [
                'fname' => 'First Name',
                'lname' => 'Last Name',
                'extensionName' => 'Extension Name',
                'specialization'=> 'Specialization',
                'subSpecialization'=> 'Sub Specialization'
            ]);

只需访问resources/lang/en/validation.php

有一个名为attributes的空白数组。

在此处添加您的属性名称,例如'cat'=>'category'

现在所有验证消息都显示类别而不是猫。

这是一个替代方案:

$data = ['name' => e(Input::get('name')), 'cat' => e(Input::get('cat'))];
$rules = ['name' => 'required|min:3', 'cat' => 'required'];
// pass an item from lang array if you need to
$nice_input_names = ['cat' => trans('lang_file.a_name_for_the_category_input')];

$validator = Validator::make($data, $rules, $messages, $nice_input_names);

Paul Dela Vega的回答对我有很大帮助,无法评论,因为没有足够的声誉。

Laravel Docs (8.x) 中没有任何关于它的信息。 也许这对 laravel 是一个很好的建议,将其添加到他们的文档中,因为它对像我这样的初学者有很大帮助。

我认为这会做到:

Validator::make($request->all(), [
  "name" => "required|min:3",
  "cat" => "required"
], [], [
  "cat" => "category"
])->validate();

在 Laravel 8 中,这是自定义验证属性和消息的最佳方式;

$request->validate([
            'cat' => "required| min:7 |max:15"
            //validation Area
        ], 
       [
        //customize Message
       ], 
        [
            'cat' => 'Category'
            //Customize Attributes Name
        ]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM