Laravel中控制器两个方法能否向同一视图传参?该如何实现?
1 getAnswer的使用方法
你的表单action属性值getAnswer对应Laravel的路由定义,需要先绑定路由到控制器处理方法,具体操作如下:
- 首先在
routes/web.php中添加POST路由:
// 替换为你实际的控制器类名 Route::post('/getAnswer', [QuestionController::class, 'answerQuestions']);
- 你当前的
answerQuestions方法就是getAnswer对应的处理逻辑,不过现在存在逻辑缺陷:提交表单后返回answerDesk视图时只传了$answers变量,视图渲染需要的$users变量不存在会报错,需要补充对应参数传递。
2 同视图传递多变量的实现方案
完全可以将多个变量传递到同一个answerDesk视图,根据你的业务场景(首次加载展示题目,提交后同时展示题目和作答结果),修改方案如下:
控制器代码修改
public function startQ(Request $request){ $users = question::limit(2)->get(); // 首次加载时$answers为空,也传入视图避免变量不存在报错 $answers = []; return view('answerDesk',compact('users', 'answers')); } public function answerQuestions(Request $request){ $answers = $request->all(); // 提交后仍然需要查询题目数据,用于视图渲染题目内容 $users = question::limit(2)->get(); // 同时传入两个变量到视图 return view('answerDesk',compact('users', 'answers')); }
视图兼容调整
你可以在视图中判断$answers是否为空,区分首次加载和提交后的展示逻辑,同时建议修改表单字段命名避免异常:
{{-- 提交后展示作答结果 --}} @if(!empty($answers)) <div class="result"> <h3>你的作答结果:</h3> {{-- 这里写判分、展示结果的逻辑 --}} </div> @endif {{-- 原有表单代码调整命名规则 --}} <form action="getAnswer" method="post" role="search"> @csrf @foreach($users as $answer) <input type="hidden" name="question[]" value="{{$answer->id}}"> <label class="form-check-label" for="inlineRadio1"> <h4 style=""><i class="fas fa-circle"></i> {{$answer->id}}:{{$answer->question}} </h4> </label><br> {{-- 将radio的name改为用$answer->id,避免题目内容有特殊字符导致提交异常 --}} <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->a}}">(A) : <label class="form-check-label" for="inlineRadio1">{{$answer->a}}</label><br> <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->b}}">(B) : <label class="form-check-label" for="inlineRadio1">{{$answer->b}}</label><br> <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->c}}">(C) : <label class="form-check-label" for="inlineRadio1">{{$answer->c}}</label><br> <input type="radio" name="answer[{{$answer->id}}]" value="{{$answer->d}}">(D) : <label class="form-check-label" for="inlineRadio1"> {{$answer->d}}</label><br> <input type="hidden" name="ans[{{$answer->id}}]" value="{{$answer->ans}}"> @endforeach <input type="submit" value="submit"> </form>
内容的提问来源于stack exchange,提问作者M Farhan Shaukat
相关产品推荐
相关产品推荐

