Laravel,在控制器中处理验证错误

Posted

技术标签:

【中文标题】Laravel,在控制器中处理验证错误【英文标题】:Laravel, Handling validation errors in the Controller 【发布时间】:2020-04-09 20:02:11 【问题描述】:

所以我正在使用以下代码验证表单的输入:

$request->validate([
    'title' => 'bail|required|max:255',
    'body' => 'required',
]);

所以基本上,表单中有两个字段,一个标题和一个正文,它们具有上述规则。现在,如果验证失败,我想直接在控制器中捕获错误,然后再重定向到视图,以便我可以发送错误消息作为对 Post 请求的响应。最好的方法是什么? 我知道错误会被推送到会话中,但这是由视图处理的,但我想在控制器本身中处理此类错误。

谢谢

【问题讨论】:

这是使用 laravel 自定义验证的最佳方式,您可以在其中定义自己的错误消息 上述评论中分享的解决方案是正确的,你必须使用这个类来使代码工作使用 Illuminate\Support\Facades\Validator; 【参考方案1】:

如果您查看official documentation,您会发现您可以通过不同的方式处理输入验证。

在您的情况下,最好的解决方案是create the validator manually,这样您就可以在控制器内部设置自己的逻辑。

如果你不想在请求上使用 validate 方法,你可以使用 Validator 门面手动创建一个验证器实例。

这里有一个小例子:

public function store(Request $request)

    $validator = Validator::make($request->all(), [
        'title' => 'bail|required|max:255',
        'body' => 'required',
    ]);

    // Check validation failure
    if ($validator->fails()) 
       // [...]
    

    // Check validation success
    if ($validator->passes()) 
       // [...]
    

    // Retrieve errors message bag
    $errors = $validator->errors();

【讨论】:

以上是关于Laravel,在控制器中处理验证错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 未显示表单验证错误 [重复]

Laravel 5.2 验证错误

从 laravel 控制器返回验证错误到 vue

Laravel 5.4,AJAX 应该不会出错

从 Laravel 的表单验证中获取纯错误消息?

在我的 laravel 应用程序中,验证错误不会显示在视图中。我怎样才能实现它?