Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

required_if Laravel 5 validation

assuming that list_type is the name of the select box to choose from (values : selling or rent)

use it this way

"sale_price" => "required_if:list_type,==,selling"

what does this mean? :

the sale price is only required if the value of list_type is equal to selling

do the same for rent_price

edit

public function rules()
{
  return [
   'list_type'  => 'required',
   'sale_price' => 'required_if:list_type,==,For Sale',
   'rent_price' => 'required_if:list_type,==,For Rent'
}

There can be another situation when, the requirement will be required if another field is not present, if someone is in this situation, you can do

'your_field.*' => 'required_unless:dependency_field.*,

You could use the Illuminate\Validation\Rules\RequiredIf rule directly.

Note: This rule is available in Laravel 5.6 and up.

class SomeRequest extends FormRequest
{
    ...
    public function rules()
    {
        return [
            'sale_price' => new RequiredIf($this->list_type == 'For Sale'),
            'rent_price' => new RequiredIf($this->list_type == 'For Rent'),
        ];
    }
}

And if you need to use multiple rules, then you can pass in an array.

public function rules()
{
    return [
        'sale_price' => [
            new RequiredIf($this->list_type == 'For Sale'),
            'string',
            ...
        ]
    ];
}


You can use Illuminate\Validation\Rule in Laravel as given below to build the validator.

$validator =  Validator::make( $request->input(), [
    'list_type' => 'required',
    'sale_price'=> Rule::requiredIf( function () use ($request){
        return $request->input('list_type') == 'For Sale';
    }),
    'rent_price'=> Rule::requiredIf( function () use ($request){
        return $request->input('list_type') == 'For Rent';
    }),
]);