You need to enable JavaScript to run this app. PHP if else语句哪里出错?无法返回toast错误提示
优惠活动
大模型
产品
解决方案
定价
更多

PHP if else语句哪里出错?无法返回toast错误提示

问题根因
  • 校验流程触发断层
    Laravel 内置的$request->validate()方法,只要匹配到不满足的校验规则,会直接中断后续代码执行,自动重定向回上一页。这是框架的默认行为,你写在后面的错误Toast提示、数据库插入逻辑根本不会被运行到。
  • 数据库插入返回值判断失效
    Laravel查询构造器的insert()方法,执行成功时返回受影响的行数(单条插入固定返回1),执行失败时直接抛出数据库层面的异常,不会返回false。你写的if ($save)判断,只要不触发数据库报错,永远会走成功分支,代码里的else块从来没有被触发的可能。
修正后的可运行代码
public function store(Request $request)
{
    // 定义校验规则
    $rules = [
        'category_name' => 'required|unique:categories|max:50',
    ];
    // 手动执行校验,不触发框架自动中断的重定向流程
    $validator = \Validator::make($request->all(), $rules);
    if ($validator->fails()) {
        // 校验不通过,手动触发错误Toast
        Toastr::error('输入内容不符合要求,请检查分类名称是否为空、重复或超长', '操作失败');
        return redirect()->route('admin.category')->withErrors($validator)->withInput();
    }

    try {
        $data = [
            'category_name' => $request->category_name
        ];
        DB::table('categories')->insert($data);
        Toastr::success('分类信息保存成功', '操作成功');
        return redirect()->route('admin.category');
    } catch (\Exception $e) {
        // 捕获数据库执行异常,触发错误Toast
        Toastr::error('分类信息保存失败,请稍后重试', '操作失败');
        return redirect()->route('admin.category');
    }
}
补充说明
  • 原代码中所有能触发错误Toast的场景(校验不通过、插入失败),都因为框架默认逻辑和方法返回值特性,完全没有走到对应分支的路径,自然只有插入成功时能正常弹出提示。
  • 如果不想在每个控制器方法里重复编写校验失败的Toast逻辑,可以在前端布局模板中读取session携带的校验错误信息,自动渲染对应的错误Toast提示。

内容的提问来源于stack exchange,提问作者Serdar Kavrazlı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:24:05