0

My need is just Laravel validation Rules. I want to use Laravel validation to check variables, and show custom errors by returning string in controller. (I don't use view, blade, session,... I just return string).

if(strlen($username) < 4) return '{"r": "US","msg": "username is short"}';
if(strlen($username) > 64) return '{"r": "UL","msg": "username is long"}';
if(strlen($address) > 200) return '{"r": "A","msg": "wrong address"}';  

I want something like this:

if($validation->username->min has error)
     return 'string:username is short';

if($validation->address->max has error)
     return 'string:address is long';

if($validation->username->unique has error)
     return 'string:username already exists';

1 Answer 1

1

Have a look at the official documentation of validation in Laravel. You don't have to handle every case manually. Validator::make() will generate a validator object for you. The first parameter will take your data as an associative array. The second argument will define all rules as desired. As a third, optional parameter you may define alternative error messages if you don't like the default ones. The will be returned in the errors() method in case something isn't valid.

$validator = Validator::make($yourDataArray, [
    'username' => 'min:4|max:64|exists:table,username',
    'address' => 'max:64'
], [
    'min' => ':attribute is too short.',
    'exists' => ':attribute already exists.
]);

if ($validator->fails()) {
    return $validator->errors()->all();
}

If you don't want to get an array with all errors at once, you can get the state of each field like so:

if ($validator->errors()->has('username')) { // Username field is invalid
    return $validator->errors()->first('username'); // Get the first error
}

And if you want to know what rule exactly failed, you can use something like that:

if(isset($validator->failed()['username']['Max'])) {
    return 'Username is too long.';
}
Sign up to request clarification or add additional context in comments.

1 Comment

I knew it. but I want something Like this: if ($validator->errors()->has('username')->has('max')) { // Username max field is invalid

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.