【问题标题】:How to give custom field name in laravel form validation error message如何在 laravel 表单验证错误消息中给出自定义字段名称
【发布时间】:2014-10-01 00:13:42
【问题描述】:

我在 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”?

【问题讨论】:

    标签: php forms validation laravel


    【解决方案1】:

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

    $messages = array(
        'cat.required' => 'The category field is required.',
    );
    
    $validator = Validator::make($input, $rules, $messages);
    

    请参阅Custom Error Messages section in laravel documentation 了解更多信息。

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

    $attributeNames = array(
       'name' => 'Name',
       'cat' => 'Category',     
    );
    
    $validator = Validator::make ( Input::all (), $rules );
    $validator->setAttributeNames($attributeNames);
    

    【讨论】:

    • 好的,这很有帮助。但我需要为所需的、最小值、最大值等指定单独的消息,对吗?这对于大型表格来说非常耗时。您知道有什么方法可以在单行中针对所有类型的错误进行更改吗?。
    • 您只想将 cat 映射到类别字段。是吗?因此默认消息将显示“类别”文本。
    • 这是我梦寐以求的解决方案 :D 谢谢!
    【解决方案2】:

    这里有一个替代方案:

    $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);
    

    【讨论】:

    • 如何在请求类文件中做到这一点
    【解决方案3】:

    我正在使用它来处理表单中的动态行添加。此答案是在管理较大表单的上下文中提供的。 此答案适用于 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) 中进行了一些挖掘以寻找线索。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 这应该是公认的答案。轻松甜蜜
      【解决方案5】:

      只需联系resources/lang/en/validation.php

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

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

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

      【讨论】:

        【解决方案6】:

        这是另一种选择 $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'
                    ]);
        

        【讨论】:

          【解决方案7】:

          the answer by Paul Dela Vega 对我帮助很大,因为没有足够的声誉,所以无法评论。

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

          【讨论】:

            【解决方案8】:

            我认为这样做可以:

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                猜你喜欢
                • 2015-12-20
                • 2016-09-09
                • 2023-03-29
                • 1970-01-01
                • 2017-05-04
                • 1970-01-01
                • 1970-01-01
                • 2020-05-27
                • 2011-10-30
                相关资源
                最近更新 更多