【问题标题】:required_if Laravel 5 validationrequired_if Laravel 5 验证
【发布时间】:2016-10-13 03:14:19
【问题描述】:

我有表格供用户填写以出售他们的房屋。对于其中一个投入,用户必须选择天气,它将是“出售”或“出租”。如果是 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',
    }

但我在提交表单时收到此错误:

【问题讨论】:

标签: php validation laravel laravel-5.2


【解决方案1】:

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

【讨论】:

  • 检查我的编辑,出错了现在试试,如果这不起作用,添加,==,像这样sale_price" =&gt; "required_if:list_type,==,selling"
  • 您评论的编辑部分有效。谢谢。
  • 上面的代码是不相关的,因为list_type => required 写下两条验证规则是没有意义的,因为它们总是需要的,因为list_type 也是required 而不是 sometimes
  • @lura Varzari 我不太明白你的意思,接下来的 2 个验证规则取决于第一个 list_type 的值 :) 如果 list_type == "for sale" 必须有一个 sale_price 字段否则,如果是租金,则必须有一个 rent_price 字段
  • 你节省了我的时间@AchrafKhouadja,谢谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 当你的验证逻辑在一个从Illuminate\Foundation\Http\FormRequest扩展的类中时使用这个。
    • 只是为了上下文,这个在问题的时候并不存在,它是在以后的laravel版本中引入的
    【解决方案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';
        }),
    ]);
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-03-06
        • 2022-12-08
        • 1970-01-01
        • 2016-12-09
        • 2019-03-21
        • 1970-01-01
        • 2019-12-16
        • 1970-01-01
        • 2019-06-07
        相关资源
        最近更新 更多