Я бы предложил использовать два отдельных входа: A select
для «выбранного значения» и input
для «Добавленной стоимости вручную». Это упростит правила:
'field1' => 'required|in:' . implode(",", Model::values()),
'field2' => 'required',
Но так как у вас в настоящее время есть правило проверки unique
, я подозреваю, что это причина, по которой вы используете его как одно поле. В этом случае вы можете создать несколько пользовательских правил проверки .
Проверка первого значения существует:
return false !== strpos($value, '-') && strlen(trim(explode('-', $value)[0])) > 0;
Проверка первого значения допустимо:
return in_array($value, Model::values());
Проверка второго значения существует:
return false !== strpos($value, '-') && strlen(trim(explode('-', $value)[1])) > 0;
Затем вы можете добавить эти правила в цепочку:
'field' => ['required', new FirstValueExists, new FirstValueValid, new SecondValueExists, 'unique:table'],
Причина, по которой у меня есть два правила для первого значения, состоит в том, чтобы разрешить более конкретные c сообщения об ошибках («Значение 1 отсутствует» и «Значение 1 недействительно»). Если вас это не волнует, вы можете объединить их в одно правило.
Обратите внимание, что я на самом деле не проверял это, но оно должно работать.