返回

如何从 Laravel 控制器中捕获自定义错误并将其展示在 Inertia.js 组件中?

vue.js

从 Laravel 控制器捕获自定义错误:使用 Inertiajs 的解决方案

引言

作为一名经验丰富的程序员,我在使用 Inertiajs 时遇到一个挑战:从 Laravel 控制器返回自定义错误。为此,我深入研究并找到了一个简洁且有效的解决方案。本文将分享如何通过 withErrors 方法和 $page.props.errors 访问器解决此问题。

捕获自定义错误:withErrors 方法

Laravel 提供了 withErrors 方法,可让你将自定义错误消息添加到会话中。在控制器方法中,如果你需要返回一个验证失败或其他自定义错误,可以使用 withErrors 方法,例如:

return back()->withErrors(['name' => 'The name is invalid']);

这会在会话中创建名为 errors 的集合,其中包含你指定的错误消息。

访问自定义错误:$page.props.errors 访问器

在你的 Vue 组件中,你可以使用 $page.props.errors 访问器访问会话中存储的错误消息。这将返回一个对象,其中包含由 withErrors 方法设置的任何自定义错误。

<template>
  <div>
    <span v-if="$page.props.errors.name" class="mt-1 text-sm text-red-700">
        {{ $page.props.errors.name }}
    </span>
  </div>
</template>

示例演示

为了说明如何使用此解决方案,这里有一个示例:

Controller:

// 自定义验证逻辑...
if ($validationFails) {
    return back()->withErrors(['name' => 'The name is invalid']);
}

Vue 组件:

<template>
  <div>
    <span v-if="$page.props.errors.name">
        {{ $page.props.errors.name }}
    </span>
  </div>
</template>

总结

通过结合 withErrors 方法和 $page.props.errors 访问器,你可以轻松地在 Inertiajs 中捕获自定义错误。这让你可以灵活地处理验证失败或任何其他自定义错误情况,并向用户显示有意义的错误消息。

常见问题解答

  • Q:为什么自定义错误不会自动添加到 Inertiajs 表单助手?
    • A:Inertiajs 表单助手通常依赖于 Laravel 的验证错误集合。自定义错误必须手动添加到会话中才能被访问。
  • Q:withErrors 方法是否会覆盖现有的错误消息?
    • A:是的,withErrors 方法将覆盖会话中现有的错误消息。
  • Q:是否可以设置多个自定义错误消息?
    • A:是的,你可以将多个错误消息传递给 withErrors 方法,它将创建具有多个键值对的对象。
  • Q:除了 name 字段,是否可以捕获其他字段的错误?
    • A:是的,你可以捕获任何字段的错误,只要你在 withErrors 方法中指定它们。
  • Q:如何清除会话中的错误消息?
    • A:你可以使用 forgetErrors 方法从会话中删除错误消息。