1
votes

Here's my request rules.

public function rules()
{
    return [
        "namespace" => "required|max:20",
        "key" => "required|max:30",
        "value" => "required",
        "value_type" => "requied|in:string,integer",
    ];
}

I need only integer in the "value" field if "value_type" is "integer". Is there any way to validate it? Laravel 5.4

I found simple solution

public function rules()
{
    $cond = '';
    if ($this->request->get('value_type') == 'integer') {
        $cond = '|integer';
    }

    return [
        "mf_id" => "required|integer",
        "resource" => "required|string",
        "res_id" => "required|integer",
        "value" => "required{$cond}",
        "value_type" => "required|in:string,integer",
        "parent" => "string",
        "parent_id" => "integer",
    ];
}
1

1 Answers

0
votes

$v = Validator::make($data, $this->rules());

then you need to use Conditionally Adding Rules.

$v->sometimes(['value'], 'required|integer', function ($data) { return is_numeric($input->value_type); });

check :-

https://laravel.com/docs/5.4/validation#conditionally-adding-rules