titonior
titonior

Reputation: 167

Laravel L5.5 dynamic request validation that depends on variable

In my controller, I have something like that:

switch ($type)
    {
        case '1':
            $validation_rules = [
                'a' => 'required',
                'b' => 'required',];
            break;
        case '2':
            $validation_rules = [
                'd' => 'required',
                'j' => 'nullable|numeric',];
            break;
        case '3':
            $validation_rules = [
                't1.x' => 'required|numeric',
                't1.y' => 'required|numeric',];
            break;
    }

$request->validate($validation_rules);

But I dont like this because it mass up my controller. I am looking for a way to use request validation instead.

Something like that would be my target:

public function store(XXRequest $request)

And put the logic for the validation inside.

Upvotes: 1

Views: 717

Answers (1)

Alexey Mezenin
Alexey Mezenin

Reputation: 163748

Create a new request file:

php artisan make:request SomeRequest

Put the logic into the rules() method:

public function rules()
{
    switch ($this->type)
        {
            case '1':
                $validation_rules = [
                    'a' => 'required',
                    'b' => 'required',];
                break;
            case '2':
                $validation_rules = [
                    'd' => 'required',
                    'j' => 'nullable|numeric',];
                break;
            case '3':
                $validation_rules = [
                    't1.x' => 'required|numeric',
                    't1.y' => 'required|numeric',];
                break;
        }

    return $validation_rules;
}

Then use it:

public function store(SomeRequest $request)

https://laravel.com/docs/5.5/validation#form-request-validation

Upvotes: 5

Related Questions