Laravel проверка запроса (не параметров)

indieman спросил: 07 октября 2018 в 02:15 в: laravel

У меня есть POST route: /tasks/{task}/start, который требует задачу для пользователя. Но перед утверждением мне нужно проверить, что задача еще не была запущена (возможно, кем-то другим).

Laravel предоставляет отличную поддержку для проверки параметров запроса. Если есть какие-либо проблемы с параметрами, затем Ларавел использует умную магию, чтобы сообщить об этих ошибках. Если запрос был сделан с Ajax, то неудачная проверка приведет к красиво отформатированному json с ошибкой. Если запрос был сделан из Интернета, то он перенаправит вас обратно withErrors.

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

Прямо сейчас я мог бы сделать что-то вроде:

public function start(Request $request, Task $task) {
    if ($task->isStarted()) {
        if ($request->isAjax()) {
            abort(400, "The task was already started");
        } else {
            redirect()->back()->withErrors("The task was already started");
        } 
    }
    // Task is not started. Let's start it...
}

Но мне интересно, есть ли какая-то нативная поддержка для проверки запроса со стороны состояние модели и разрешение Laravel обрабатывать сообщение об ошибке.

EDIT

я нашел другое решение, но оно кажется довольно неуклюжим:

Validator::make($request->all(), [])->after(function ($validator) use ($task) {
    if ($task->isStarted()) {
            $validator->errors()->add('task', 'The task was already started');
    }
})->validate();

0 ответов