簡體   English   中英

required_if Laravel 5 驗證

[英]required_if Laravel 5 validation

我有用戶可以填寫的表格以出售他們的房屋。 對於輸入之一,用戶必須選擇天氣,它將是“出售”或“出租”。 如果是 For Sale,則會出現兩個價格輸入字段,如果是 For Rent,則會出現一些基於 jQuery 的其他價格輸入字段。

我的問題是我希望價格字段是必需的,但是例如,如果我選擇“出租”,然后提交我的表單,它會給我一個錯誤,說明“待售”輸入字段的價格字段是必需的,即使它在“出租”部分下。

我知道 Laravel 中有一個required_if ,但我只是不知道如何利用它。 這是我對房產的要求。

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

/******************** 編輯 ****************************/

我現在所擁有的:

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

但是當我提交表單時出現此錯誤:

我的錯誤

假設 list_type 是要從中選擇的選擇框的名稱(值:出售或出租)

用這種方式

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

這是什么意思?

如果LIST_TYPE的值等於銷售價格只需要selling

rent_price做同樣的rent_price

編輯

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.*,

您可以直接使用Illuminate\\Validation\\Rules\\RequiredIf規則。

注意:此規則在 Laravel 5.6 及更高版本中可用。

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

而如果你需要使用多個規則,那么你可以傳入一個數組。

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

您可以使用 Laravel 中的Illuminate\\Validation\\Rule來構建驗證器,如下所示。

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

對我來說,有了這個required_if我需要檢查兩個值,我寫為

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM