Alexander
Alexander

Reputation: 1029

Laravel 5: Check for Specific Error

I have Password and Confirm Password inputs. I have coded these inputs so that in the event of an error the inputs highlight, like so:

<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}>
    <label>Password</label>
    <input type="password" name="password" class="form-control">
</div>

<div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}>
    <label>Password</label>
    <input type="password" name="password_confirmation" class="form-control">
</div>

In my Controller, I validate these inputs as follows:

$this->validate($request, [
    ....
    'password'                 => 'required|min:8|confirmed',
    'password_confirmation'    => 'required',
    ....
]);

When either input is null and/or less than 8 characters, the inputs highlight as expected. However, when the inputs don't match, I would logically expect the Confirm Password input to highlight. However, it is the Password field that highlights, because that is the input that the "confirmed" rule is set to.

The "$errors->has()" method simply checks if an error exists for an input. Is there a way to check if an input has a specific kind of error?

Upvotes: 0

Views: 3337

Answers (1)

baikho
baikho

Reputation: 5368

Yes, you can get the array of errors for a given input name by using:

{{ $errors->get('password') }}

So you can check if the password errors array has the confirmation error and then add the additional class to your confirmation input field:

 @if (in_array(trans('validation.confirmed', ['attribute' => 'password']), $errors->get('password'))) has-error @endif

And the helper methods may vary between Laravel versions:

Laravel < 5.4: trans('validation.confirmed', ['attribute' => 'password'])

Laravel 5.4: __('validation.confirmed', ['attribute' => 'password'])

Upvotes: 2

Related Questions