首页 > 解决方案 > 根据选择的选项更改存在规则

问题描述

所以我有这个简单的代码来根据注册表中的数据库值输入值,它工作得很好,

下面的代码位于register.blade.php

  1. 这用于选择分支

    <div class="form-group form-material floating">
      <select class="form-control" name="branch" id="branch">
          <option value="1">Option A</option>
          <option value="2">Option B</option>
      </select>
      <label class="floating-label" for="inputStatus">Branch</label>
    </div>
    
  2. 这个用于输入参考

    <div class="form-group form-material floating {{ $errors->has('reference') ? ' has-error' : '' }}">
            <input type="text" class="form-control empty" id="reference" name="reference">
              <label class="floating-label" for="inputStatus">Reference</label>
              @if ($errors->has('reference'))
                  <span class="help-block">
                      <strong>{{ $errors->first('reference') }}</strong>
                  </span>
              @endif
          </div>
    

下面的代码位于RegisterController.php

  1. 而这个用于验证

    protected function validator(array $data)
     {
    
     return Validator::make($data, [
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
    'phone' => 'required|string|min:5|max:20',
    'rate' => 'required',
    'product' => 'required',
    'branch' => 'required',
    'reference' => [
        'required',
            Rule::exists('references')->where(function ($query) {
                if( 'branch' == 1 ){
                    $query->where('references.type', '=', "TOP"); 
                }
                else{
                    $query->where('references.type', '=', "BOTTOM");     
                }
            }),
        ],
       ]
      );
     }
    

在注册表中,当用户在分支上选择第一个选项时,用户只能写(例如:'ABC','DEF','GHI'),如果用户写另一个值,它将返回错误消息:'错误的参考代码',但是当用户在分支上选择第二个选项时,用户只能写(例如:'123'、'456'、'789'),有没有人知道该怎么做?谢谢

编辑 1:上面的代码工作正常,但存在的参考规则不起作用,用户在选择第二个选项时仍然可以输入“ABC”、“DEF”或“GHI”。

编辑 2:我里面也有这个自定义验证register.blade.php

fields: {
        reference: {
            validators: {
                notEmpty: {
                    message: 'Reference must be filled'
                },
                stringLength: {
                    max: 8,
                    message: 'Max 8 character'
                }
            }
        }
    }

标签: javascriptphphtmllaravel

解决方案


您可以进行自定义验证。所以你可以在你的自定义验证中移动这个额外的验证。也许它可以解决你的问题。

有关自定义验证的更多信息,请参阅:Laravel 自定义验证

希望能帮助到你:)


推荐阅读