【发布时间】:2018-11-01 13:00:31
【问题描述】:
我有一个POST 路由:/tasks/{task}/start,它为用户声明了任务。但在声明之前,我需要验证该任务尚未启动(可能由其他人启动)。
Laravel 为请求参数的验证提供了出色的支持。
如果参数有任何问题,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 处理错误的通信。
编辑
我找到了另一种解决方案,但似乎比较笨拙:
Validator::make($request->all(), [])->after(function ($validator) use ($task) {
if ($task->isStarted()) {
$validator->errors()->add('task', 'The task was already started');
}
})->validate();
【问题讨论】:
标签: laravel