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

