Сделайте Laravel не чувствительным к регистру правила валидации notIn - PullRequest
0 голосов
/ 07 мая 2018

Я храню массив строк в моей базе данных (тип столбца db - JSON). Существует форма, которая позволяет пользователям добавлять значение в этот массив. Я хочу убедиться, что в этом массиве нет дубликатов. Правило проверки notIn представляется наиболее простым решением для предотвращения дублирования, но оно чувствительно к регистру. Поэтому при использовании notIn я не могу предотвратить использование одинаковых строк с разной капитализацией.

$this->validate(request(), [
    'choice' => [
        'required',
        Rule::notIn($choices)
    ]
]);

Есть ли у кого-нибудь рекомендации, как мне исправить эту проверку, чтобы сравнение строк не учитывало регистр?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Спасибо Рами Херриа , я смог расширить его ответ, чтобы также работать в классе FormRequest:

protected function validationData()
{
    $all = parent::validationData();
    //Convert request value to lowercase
    $all['choice'] = strtolower($all['choice']);
    return $all;
}

public function rules()
{
    $choices = $this->route('modelName')->choices;
    return [
        'choice' => [
            'required',
            //Also convert array to lowercase
            Rule::notIn(array_map('strtolower', $choices))
        ]
    ];
}
0 голосов
/ 07 мая 2018

Вы можете использовать как строчные, так и текущие данные, например:

$input = request()->all();
$input['choice'] = array_map("strtolower", $input['choice']);
$this->validate($input, [
    'choice' => [
        'required',
        Rule::notIn(array_map("strtolower", $choices))
    ]
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...