JOE
JOE

Reputation: 539

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

I was trying form validation in laravel. I have a input text field in my form called 'Category' and i'm given the field name as 'cat' as short.

And i defined the validation rules like this.

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

When the validation fails i'm getting error message like this

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

But i want to display it as "The category field is required" instead of 'cat'.
How can i change 'cat' to 'Category' in error message ?.

Upvotes: 29

Views: 55716

Answers (9)

Nazakat
Nazakat

Reputation: 11

in Laravel 8 this is the Best Way to Customize Validation Attributes and Message;

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

Upvotes: 1

Magmatic
Magmatic

Reputation: 1951

I think this will do it:

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

Upvotes: 1

SADmiral
SADmiral

Reputation: 41

the answer by Paul Dela Vega is big help for me, cant comment because no reputation enough.

no information of it anywhere in Laravel Docs (8.x). maybe this is a good suggestion to laravel, to add this into their documents because it helps a lot for the beginner like me.

Upvotes: 0

Paul Dela Vega
Paul Dela Vega

Reputation: 221

Here is an Alternative $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'
            ]);

Upvotes: 22

Hitender
Hitender

Reputation: 189

Simply got to resources/lang/en/validation.php

There is a blank array named attributes.

add your attribute name here like 'cat'=>'category'

now all validation messages show category instead of cat.

Upvotes: 5

hamid Reza Kamali
hamid Reza Kamali

Reputation: 311

you can customize every message ,also change the attribute fields name in validation.php (resources/lang/en/). for set the attribute in validation.php

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

Upvotes: 31

GeraldBiggs
GeraldBiggs

Reputation: 1200

I'm using this to deal with dynamic row addition in forms. This answer is provided in context of managing larger forms. This answer is for Laravel 5

Form request

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',
    ];
}

Hope this help steer you in the right direction if you are using Laravel 5. I'm currently working on testing it out. The documentation seems to be amiss regarding this potential?

I did some digging in the framework (Illuminate\Foundation\Http\FormRequest.php) and (Illuminate\Validation\Validator.php) for the clues.

Upvotes: 24

Calin Blaga
Calin Blaga

Reputation: 1373

Here's an alternative:

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

Upvotes: 1

uiroshan
uiroshan

Reputation: 5181

You can specify custom error message for your field as follows.

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

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

Please see Custom Error Messages section in laravel documentation for more information.

Or you can keep a mapping for your field names like below. And you can set those into you validator. So you can see descriptive name instead of real field name.

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

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

Upvotes: 49

Related Questions