【发布时间】:2021-01-02 01:21:26
【问题描述】:
通常 Laravel 的表单请求会在验证失败时返回一个通用的 400 代码,如下所示:
{
"message": "The given data is invalid",
"errors": {
"person_id": [
"A person with ID c6b853ec-b53e-4c35-b633-3b1c2f27869c does not exist"
]
}
}
如果请求未通过我的自定义规则,我想返回 404。
我的自定义规则检查数据库中是否存在记录:
class ValidatePersonExists implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
public function passes($attribute, $value)
{
return Person::where('id', $value)->exists();
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return "A person with ID :input does not exist";
}
}
如果我在 exists() 检查失败时抛出 ModelNotFoundException,我在哪里可以捕捉到它以友好的 404 响应进行响应?
这是我使用规则的表单请求:
public function rules()
{
return [
'person_id' => ['bail', 'required', 'uuid', new ValidatePersonExists],
];
}
【问题讨论】:
-
你如何在控制器中处理它?
-
它没有到达控制器。 Laravel 的表单请求执行验证,并返回那里。
-
然后尝试仅使用验证器验证控制器中的数据,如果验证器失败,您可以发送 404 状态码。
标签: laravel http-status-code-404 rules