简体   繁体   中英

required_if Laravel 5 validation

I have form that a user can fill-out for selling their home. And for one of the in puts, a user must select weather it will be "For Sale" or "For Rent". If it is For Sale, two price input fields will appear, and if it is For Rent, then some other price input field will appear based off of jQuery.

My problem is I want the price fields to be required, BUT for example if I'am selecting "For Rent", and then I submit my form, it will give me an error saying the price fields for the "For Sale" input fields are required, even though it is under the "For Rent" section.

I know there is a required_if in Laravel, but I just dont know how to utilize that. Here is my Requests for a Property.

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class PropertyRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'list_type' => 'required',
            'sale_price' => 'required', // <-- maybe like: required_if:value
            'rent_price' => 'required',   
        ];
    }
}

/****************** EDIT ***************************/

What I have now:

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

But I get this error when I submit the Form:

我的错误

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'
}

可能还有另一种情况,如果另一个字段不存在,则需要该要求,如果有人处于这种情况,您可以这样做

'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 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';
    }),
]);

For me, with this required_if i needed to check with two values and I wrote as

return [
        'change_status' => 'required',
        'forward_to' => 'required_if:change_status,2,3'
    ];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM