Laravel Validator - Get error messages as an array in controller

Viewed 1371

Here is my laravel validation

$validation = Validator::make($request->all(), [
            'template_id' => 'required',
            'email' => ['required', 'email', 'unique:user,email'],
            'first_name' => 'required',
            'last_name' => 'required',
        ]);

If i print $validation->messages() i am getting below

Illuminate\Support\MessageBag Object
(
    [messages:protected] => Array
        (
            [template_id] => Array
                (
                    [0] => The template id field is required.
                )

            [first_name] => Array
                (
                    [0] => The first name field is required.
                )

        )

    [format:protected] => :message
)

But I want like below

Array
(
    [0] => The template id field is required.
    [1] => The first name field is required.
)

There is the specific use of that so needs this Thank you in advance

3 Answers

You could try asking the MessageBag for all the messages:

$validation->messages()->all()

You can use getMessageBag method present in validator class.

 $validation->getMessageBag()->first();

Also you can set custom error messages like below:

if(User::where('email', $email)->first())
{
    $validator->getMessageBag()->add('password', 'Please enter correct Password');
}
else
{
    $validator->getMessageBag()->add('email', 'Email does not exists');
}
$validation = Validator::make($request->all(), [
            'template_id' => 'required',
            'email' => ['required', 'email', 'unique:user,email'],
            'first_name' => 'required',
            'last_name' => 'required',
        ]);

if you want all errors same time you just write code like

$validation->messages()->all()

or if you want one by one error so write code like

$validation->messages()->first()
Related