【问题标题】:Laravel required_unless validationLaravel required_unless 验证
【发布时间】:2017-12-25 19:32:59
【问题描述】:

我在使用required_unless 验证时遇到问题。

我想做的是当building numberempty或其他方式时需要building name,因此当building nameempty时需要building number强>。目前两者都需要。

public function rules(Request $request)
{
    $id = $request->input('entity_id');
    $entity = Entity::with('address')
        ->find($id);
    $validation = $entity->id;
    return [
        'name' => 'required|alpha_special|unique:entities,name,'.$validation.'|min:3|max:30',
        'type' => 'required',
        'email' => 'required|email|unique:entities,email,'.$validation,
        'building_name' => 'alpha|required_unless:building_number,value',
        'building_number' => 'numeric|required_unless:building_name,value',
        'street' => 'required|alpha_spaces',
        'town' => 'nullable|alpha',
        'city' => 'nullable|alpha',
        'postcode' => 'required|max:8',
        'telephone' => 'required|telephone',
        'ical' => 'nullable|active_url',
    ];
}

查看:

<div class="hidden multi form-group{{ $errors->has('building_name') ? ' has-error' : '' }}">
                          <div class="building_name_message form-control alert-warning" style="display: none;"></div>
                            <label  id="building_name_label" for="building_name" >Building Name</label>
                            <input  id="building_name" type="text" class="form-field form-control" placeholder="Building name (If applicable)" name="building_name" value="{{ old('building_name') }}">
                              @if ($errors->has('building_name'))
                                <span class="help-block">
                                  <strong>{{ $errors->first('building_name') }}</strong>
                                </span>
                              @endif
                          <div class="building_number_message form-control alert-warning" style="display: none;"></div>
                            <label  id="building_number_label" for="building_number" >Building Number</label>
                            <input  id="building_number" type="text" class="form-field form-control" placeholder="Building Number (If applicable)" name="building_number" value="{{ old('building_number') }}">
                              @if ($errors->has('building_number'))
                                <span class="help-block">
                                  <strong>{{ $errors->first('building_number') }}</strong>
                                </span>
                              @endif
                              <div class="form-navigation">
                                <button type="button" class="previous btn btn-info pull-left">&lt; Previous</button>
                                <button type="button" id="next" class="next btn btn-info pull-right">Next &gt;</button>
                              </div>
                        </div>

【问题讨论】:

    标签: laravel validation laravel-5


    【解决方案1】:

    你应该根据你的要求使用required_without

    'building_name' => 'alpha|required_without:building_number',
    'building_number' => 'numeric|required_without:building_name',
    

    【讨论】:

      【解决方案2】:

      您必须在验证中放置 null 而不是 value 以进行空值检查。

      'building_name' => 'alpha|required_unless:building_number,null',
      'building_number' => 'numeric|required_unless:building_name,null',
      

      另一种方法是将required_without 用作:

      'building_name' => 'alpha|required_without:building_number',
      'building_number' => 'numeric|required_without:building_name',
      

      请参阅文档here

      更新

      由于上述验证检查alphanumeric类型分别为building_namebuilding_number,您可以更改验证规则的顺序,以便它首先检查required_without而不检查值如果它不存在。

      'building_name' => 'required_without:building_number|alpha',
      'building_number' => 'required_without:building_name|numeric',
      

      这可能适用于您的情况。

      希望,你明白。

      【讨论】:

      • 但它仍在验证中,并且当它为 null 时不会让它通过 building_name。它说 building_name.alpha' => 'House/Building name can only contain letters' 这个错误信息。
      • 您可以先将验证顺序更改为required_without,然后alpha
      • 我确实尝试过,但它仍然给我一个错误,我将使用该页面的相关视图更新我的问题
      • @PrzemekWojtas 我已经更新了。试试这个可能适合你的情况。
      • 是的,我确实尝试过你发布的 lat
      【解决方案3】:

      来自文档:

      required_unless:anotherfield,value,...

      验证中的字段必须存在且不为空,除非 anotherfield 字段等于任何值。

      这听起来不像你需要的(从技术上讲,如果“value”设置为“null”,它可以工作,但有什么意义呢?),但是下一个是:

      required_without:foo,bar,...

      只有当任何其他指定字段不存在时,验证的字段才必须存在且不能为空。

      'building_name' => 'alpha|required_without:building_number',
      'building_number' => 'numeric|required_without:building_name',
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-17
        • 2016-09-01
        • 2020-08-14
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多