0

I want to make start_po_no validation(required_if and digits_between) when po_type value is 1 and use_spo field value is 1. Now, I'm written validation rule in request file like following:

public function rules()
{
    return [
        'use_spo' => 'required',
        'po_type' => 'required',
        'start_po_no' => Rule::requiredIf(function () use ($supplierPoUse, $generatePo) {
            return request("use_spo") == 1 && request("po_type") == 1;
        }).'|digits_between:1,9',
    ];
}

But, this code only correct for required_if, but digits_between is still not working. I read laravel validation documentation but I'm not user how to check it correctly.

#Edit

But, digits_between validation still checking even use_spo or po_type is not 1. I want also digits_between validation when use_spo and po_type is equal to 1.

2 Answers 2

2

Based on the explanation, I believe you can just add the rules conditionally. No reason to make it more complicated.

public function rules()
{
    $rules = [
        'use_spo' => 'required',
        'po_type' => 'required',
    ];

    if (request("use_spo") == 1 && request("po_type") == 1) {
        $rules['start_po_no'] = 'required|digits_between:1,9';
    }

    return $rules;
}
Sign up to request clarification or add additional context in comments.

2 Comments

much better & easy
best way :) Thanks
0

I have two ways of doing it

Using Closures

return [
        'use_spo' => 'required',
        'po_type' => 'required',
        'start_po_no' => [
            Rule::requiredIf(function () use ($supplierPoUse, $generatePo) {
                return request("use_spo") == 1 && request("po_type") == 1;
            }),
            function ($attribute, $value, $fail) {
                if (request("use_spo") == 1 && request("po_type") == 1) {
                    if(!(1 <= $value && $value <= 9))
                        $fail('The '.$attribute.' is invalid.');
                }
            }
        ]
    ];

Using add()

Don't use digits between just after but do it after validation rules are run. you can add your validation after initial validation.

$validator = Validator::make(...);

$validator->after(function ($validator) {
    if (request("use_spo") == 1 && request("po_type") == 1) {
        if(!(1 <= $value && $value <= 9))
            $validator->errors()->add(
                'start_po_no', 'invalid start po no'
            );
        }
});

if ($validator->fails()) {
    // throw your validation exception
}

Comments

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.