Используйте `trans_choice ()` в сообщениях проверки запроса с параметром правила проверки

Мне нужно правило проверки запроса для возврата настраиваемого сообщения в случае сбоя, и, поскольку проверяемое поле представляет собой массив с правилом min:x, я хотел бы иметь настраиваемое сообщение как для единственного, так и для множественного числа вариантов.

Мне просто интересно, как передать функции trans_choice() параметр :min из правила проверки:

Файл перевода:

'array' => [
    'field' => [
        'min' => 'You need to select at least one item.|you need to select at least :min items',
    ],
],

Запросить message() метод:

public function messages() {
    'my.array.field.min' => trans_choice('translations::array.field.min', ???),
}

person fudo    schedule 30.06.2020    source источник


Ответы (1)


Похоже, что в Laravel нет ничего, что могло бы использовать trans_choice всякий раз, когда вы можете использовать множественное число для строки перевода.

Вы можете решить эту проблему, временно (или навсегда, в зависимости от вашего варианта использования) изменив заменитель для min правило примерно так:

Validator::replacer('min', function ($message, $attribute, $rule, $parameters, $validator) {  
    $minValue = $parameters[0];

    $message = Str::contains($message, '|')
        ? trans_choice($message, $minValue)
        : $message;
  
    return str_replace(':min', $minValue, $message);
});

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

person Dan    schedule 30.06.2020