Search code examples
laravellaravel-5laravel-5.3

Laravel 5.3 - Validation rule min and required_if issue


So in a Request we have some validation, where the type field will be review, which means the body field has to have a minimum of 6 characters.

public function rules(){
     return [
       'type' => 'required|in:star_rating,review',
       'body' => 'required_if:type,review|min:6'
     ];
 }

However, the issue is that when the type is star_rating, I get an error that The body must be at least 6 characters.

This should not happen, since the body is optional and ONLY should be required and validated with min:6 if type is review. I can't seem to figure out why it runs the min:6 validation on it even if the type is star_rating.

Any idea how to get it to work as intended?


Solution

  • Without seeing more of your logic, I can't be certain how you want to proceed. But the concept below should get you going.

    It conditionally adds rules according to parameters you define. In your case, it only requires body if type is review, and also applies the min rule of 6 characters if again, type is review.

    use Validator;
    
    // Static rules that don't change
    $v = Validator::make($data, [
        'type' => 'required|in:star_rating,review'
    ]);
    
    // Conditional rules that do change
    $v->sometimes('body', 'required|min:6', function ($input) {
        return $input->type === 'review';
    });
    
    // Validator failed? Return back with errors/input
    if ($validator->fails()) {
        return back()->withErrors($validator)
                     ->withInput();
    }
    
    // Proceed however you'd like with request