@koida_yuri

Как сделать мультивалидацию в Laravel?

Есть такая задача:
term_installments - Если first_payment не 100 то between:0,12
term_installments - Если resource_id = 154 то between:0,60
Тобишь в одной проверке нужно указать 2 битвина.
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
miraage
@miraage
Старый прогер
AppServiceProvider (хотя под такие штуки я завожу отдельный ValidatorServiceProvider) в методе boot.
Насколько я понял, то надо сначала проверить resource_id, а затем first_payment.
Идея понятна, реализация за Вами.

\Validator::extend('your_rule_name', function ($attr, $value, $params, \Illuminate\Validation\Validator $validator) {
    // request data
    $data = $validator->getData();
    
    if (array_get($data, 'resource_id') === 154) {
        return $value >= 0 && $value <= 60;
    }
    
    if (array_get($data, 'first_payment') !== 100) {
        return $value >= 0 && $value <= 12;
    }
    
    return false;
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ollisso
Чтоб не создавать правило каждый раз, можно сделать проще:

$validator = Validator::make(...);

$validator->after(function ($validator) {
    if ($this->somethingElseIsInvalid()) {
        $validator->errors()->add('field', 'Something is wrong with this field!');
    }
});

if ($validator->fails()) {
    //
}


Т.е. после того как основные правила проверили, проверить и что то ещё :)
Код может быть любой там.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы