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

如何在Laravel Blade视图中返回并显示错误/成功提示信息?

问题

我希望在发起请求的同一个Blade视图上显示控制器返回的成功或错误提示信息,当前请求URL为:

http://localhost:8000/my_details?my_id='.$id

现有控制器代码

public function my_action(Request $request){
    $myauth=$request->validate([
        'remarks' => 'required'
    ]);
    $full_name = Auth::user()->full_name;
    $id=$request->input('id');
    $user_remarks=$request->input('user_remarks');
    $remarks=$myauth['remarks'];
    $status=$request->input('status');
    $newremarks=$user_remarks . ' ' . $full_name . ': ' . $remarks .';';
    $result=DB::table('my_record')->where('id',$id)->update([
        'remarks'=>$newremarks,
        'status'=>$status,
    ]);
    if($result){
        return redirect(route('my_details?my_id='.$id))->with('success', 'Action taken successfully.');
    }
    return redirect(route('my_details?my_id='.$id))->with('error','Remarks cannot be empty');
}

现有Blade视图代码

<div>
    @if(Session::has('error'))
        <div class="w3-panel w3-red" role="alert">
            {{ Session::get('error') }}
        </div>
    @endif
    @if(Session::has('success'))
        <div class="w3-panel w3-green" role="alert">
            {{ Session::get('success') }}
        </div>
    @endif
</div>
解决方案

1. 修正路由跳转写法

你当前用route('my_details?my_id='.$id)的方式错误,Laravel的route()函数需要传入路由名称和参数数组,不能直接拼接URL。正确写法如下:

// 成功跳转
return redirect()->route('my_details', ['my_id' => $id])->with('success', '操作成功。');

// 错误跳转(注:验证失败时validate方法会自动重定向,此代码实际不会执行)
return redirect()->route('my_details', ['my_id' => $id])->with('error', '备注不能为空');

2. 确保路由定义正确

在routes/web.php中,my_details路由无需声明my_id参数(它是URL查询参数,可通过$request->input('my_id')获取),示例定义:

Route::get('/my_details', [YourController::class, 'my_details'])->name('my_details');

3. 处理验证失败的错误信息

$request->validate()验证失败时,会自动重定向回上一页并将错误存入$errors变量,可在视图中添加以下代码显示验证错误:

@if($errors->any())
    <div class="w3-panel w3-red" role="alert">
        @foreach($errors->all() as $error)
            {{ $error }}
        @endforeach
    </div>
@endif

4. 优化控制器逻辑

因为validate()失败会直接终止执行并重定向,你代码中最后的错误跳转永远不会触发,调整后逻辑更合理:

public function my_action(Request $request){
    // 验证备注必填
    $request->validate([
        'remarks' => 'required|string'
    ]);

    $full_name = Auth::user()->full_name;
    $id = $request->input('id');
    $user_remarks = $request->input('user_remarks', ''); // 设默认值避免空拼接
    $remarks = $request->input('remarks');
    $status = $request->input('status');

    $newremarks = trim($user_remarks) . ' ' . $full_name . ': ' . $remarks .';';
    $result = DB::table('my_record')->where('id', $id)->update([
        'remarks' => $newremarks,
        'status' => $status,
    ]);

    // 根据更新结果返回对应提示
    if($result){
        return redirect()->route('my_details', ['my_id' => $id])->with('success', '操作成功。');
    } else {
        return redirect()->route('my_details', ['my_id' => $id])->with('error', '更新失败,请重试。');
    }
}

调整后,执行操作后会正确重定向到原my_details页面,并在视图中显示对应的成功或错误提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:14:52