You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inertia.js + Laravel 如何无需重定向抛出自定义错误触发Vue端onError

解决方案

Inertia的onError回调仅会捕获4xx/5xx状态码、且符合Inertia响应规范的请求结果,直接返回普通JSON响应不会被识别,也不会触发回调。你可以按以下方式修改控制器代码即可实现需求:

修改后的控制器代码

public function createOrganisations(Request $request)
{
    try {
        // 此处保持你原有业务逻辑不变,注意补充$companyID、$orgName、$orgDescription的赋值逻辑
        CompanyOrganisations::create([
            'company_id' => $companyID,
            'name' => $orgName,
            'description' => $orgDescription,
        ]);
    } catch(Exception $e) {
        // 核心逻辑:返回带错误信息的响应,设置4xx状态码
        return redirect()->back()
            ->withErrors([
                'toastMessage' => '创建组织失败,请稍后重试'
            ])
            ->setStatusCode(400);
    }       

    return Redirect::route('company.organisations')->with([
        'toastMessage' => 'Organization created!'
    ]);
}

注意事项

  • 状态码必须设置为4xx范围(比如400、403、422),不能是200或302,否则Inertia会默认走成功/重定向逻辑,不会触发onError
  • withErrors方法传入的数组键值会直接映射到前端onError回调的errors对象属性,你这里用toastMessage作为键,刚好匹配前端写的errors.toastMessage,不需要额外修改前端代码
  • 不需要手动返回JSON响应,Laravel的Inertia中间件会自动把错误信息转为符合Inertia规范的响应格式,不会触发页面重定向
  • 记得修正原有代码中catch(Excpetion)的拼写错误,正确写法是catch(Exception $e),否则异常无法被捕获

内容的提问来源于stack exchange,提问作者Carlson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:45:05