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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:09:01