laravel - проверка с пользовательским значением - PullRequest
0 голосов
/ 26 марта 2020

Моя форма имеет текстовое поле и 3 переключателя. Переключатели указывают, какой тип инструмента пользователь хочет использовать, но он должен иметь их в своем инвентаре. Существует 3 типа инструментов, и каждый переключатель можно выбрать, только если он владеет хотя бы одним из них. Я хочу проверить его, если он действительно им владеет. В приведенном ниже примере переменные $tool1 - 3 содержат количество каждого инструмента, которое есть у пользователя. (например: $tool1 = 1, $tool2 = 3, $tool3 = 0) В этом случае проверка должна быть в порядке, если пользователь выбрал одну из первых двух радиокнопок, поскольку он владеет необходимыми инструментами, но должен потерпеть неудачу, если выберет третью радиокнопку.

Поле 'инструмент' содержит фактический выбранный инструмент, поэтому инструментом может быть инструмент1, инструмент2 или инструмент 3.

$tool1;
$tool2;
$tool3;

$data = request()->validate([
        'name'=> 'required',
        'tool' => 'required',
    ]);

как это можно сделать?

1 Ответ

1 голос
/ 26 марта 2020

Следующая структура данных, с которой вы можете сделать несколько полезных трюков и должна быть доступна, так как я понимаю ваш домен.

$tools = collect(['tool1' => $tool1, 'tool2' => $tool2, 'tool3' => $tool3]);

Найти все инструменты, в которых число больше 0, filter() удаляет все нулевые значения и так как 0 == ноль. Чтобы подтвердить ввод, нам нужно только имя, мы получаем это с keys().

// Should return 'tool1' and 'tool2' in an array from your example
$toolsOwned = $toolsOwned->filter()->keys();

Теперь мы можем использовать проверку In(), чтобы проверить правильность ввода.

use Illuminate\Validation\Rules\In;

...

'tool' => ['required', new In($toolsOwned->all())],
...