required_if Laravel 5验证

时间:2016-06-12 17:43:05

标签: php validation laravel laravel-5.2

我的表格是用户可以填写出售他们的房屋。对于其中一个投注,用户必须选择天气,它将是“待售”或“出租”。如果是For Sale,将出现两个价格输入字段,如果是For Rent,那么其他一些价格输入字段将基于jQuery显示。

我的问题是我想要价格字段是必需的,但是例如如果我选择“出租”,然后我提交我的表格,它会给我一个错误说“出售”的价格字段“输入字段是必需的,即使它位于”For Rent“部分。

我知道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',
    }

但是,当我提交表格时,我收到此错误:

My Error

5 个答案:

答案 0 :(得分:66)

假设list_type是可供选择的选择框的名称(值:出售或出租)

以这种方式使用

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

这是什么意思?

仅当list_type的值等于selling

时才需要销售价格

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

答案 1 :(得分:7)

您也可以直接使用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'),
            'numeric', 
            'string',
            ...
        ]
    ];
}

答案 2 :(得分:4)

在另一种情况下,如果不存在其他字段,则将需要此要求,如果有人处于这种情况,则可以

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

答案 3 :(得分:4)

您可以按照以下说明在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';
    }),
]);

答案 4 :(得分:0)

对我来说,使用这个 required_if 我需要检查两个值,我写为

camera([x], [y], [z], [centerX], [centerY], [centerZ], [upX], [upY], [upZ])