Изменение существующего правила на основе выбранной опции - PullRequest
0 голосов
/ 19 февраля 2020

Итак, у меня есть этот простой код для ввода значения на основе значения базы данных в регистрационной форме, и он отлично работает,

Код ниже расположен по адресу 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

И этот для проверки

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

В регистрационной форме, когда пользователь выбирает первый вариант на ветке, пользователь может писать только (Пример: 'AB C ',' DEF ',' GHI '), если пользователь напишет другое значение, он вернет сообщение об ошибке: «Неверный ссылочный код», но когда пользователь выберет вторую опцию в ветви, пользователь сможет только написать (пример: «123») , '456', '789'), есть у кого-нибудь и идея, как это сделать? Спасибо

Редактировать 1: приведенный выше код работает нормально, но существующее правило для справки не работает, пользователь по-прежнему может вводить «AB C», «DEF» или «GHI» при выборе второго варианта .

Редактировать 2: У меня также есть эта пользовательская проверка внутри register.blade.php

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

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Для этого вам нужна пользовательская проверка. Пользовательская проверка . Что касается запроса, вы можете сделать это внутри

public function passes($attribute, $value){
  //value will have your reference value
 //Logic here and return true/false
}

 public function message()
    {
       //error message
        //return "The :attribute value doesnt exist.";
    }

, и если вы хотите передать параметры в пользовательском правиле, вам нужно использовать конструктор и использовать его. то есть

protected $customParams;
    public function __construct($customParams)
    {
        $this->customParams = $customParams;
    }

и правила будут выглядеть так

 'reference' => ['required',new CustomRule('customvalue')]

Надеюсь, это поможет.

0 голосов
/ 19 февраля 2020

Вы можете сделать пользовательскую проверку. Таким образом, вы можете переместить эту дополнительную проверку в свою пользовательскую проверку. Может быть, это может решить вашу проблему.

Для получения дополнительной информации о пользовательской проверке см. Это: Laravel Пользовательская проверка

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...