Laravel: проверять поле только при изменении значения - PullRequest
0 голосов
/ 09 января 2020

Некоторые поля формы в моем приложении laravel 5.5 имеют правила проверки, которые работают с удаленным API и занимают довольно много времени. Таким образом, я хотел бы запускать эти дорогостоящие проверки только при изменении значения поля (отличающегося от значения, хранящегося в данный момент в модели).

Есть ли что-то, что уже реализует это, например, как правило, аналогично sometimes?

Я бы изобразил это так: only_changed|expensive_validation|expensive_validation2. Последние правила будут выполняться только при изменении значения поля.

1 Ответ

0 голосов
/ 09 января 2020

Предполагая, что вы используете пользовательский класс Request, метод rules() ожидает, что ассоциативный массив будет возвращен до того, как он применяет проверку.

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

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    $validation_array = [
        'name'     => 'required|string|max:255',
    ];

    if ($this->my_field === $some_condition) {
        $validation_array = array_merge($validation_array. [
            'my_field' => "required|expensive_validation|expensive_validation2"
        ]);
    }

    return $validation_array;
}

Примечание: я еще не запускал, но принцип должен быть в порядке.

...