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
相关产品推荐
相关产品推荐

