我正在构建一个测验应用程序。我希望问题和可能的答案是随机的,这样当用户尝试相同的测验时,他会得到相同的问题,但顺序不同。我还想一次只显示一个问题(可能的答案),并且用户应该能够通过他的问题返回或前进。
我正在使用 Laravel 的分页来确保我一次向用户提出一个问题。
我的路线定义如下:
Route::get('questions/{exam}', 'QuestionController@getSingleExam')->name('questions-exam');
在控制器中我有:
public function getSingleExam(Exam $exam) {
$questions = Question::inRandomOrder()->where('exam_id', '=', $exam->id )->with(['options' => function($query) {
$query->orderBy(DB::raw('RAND()'));
}])->simplePaginate(1);
return view('frontend.modules.question-wizard', ['questions' => $questions,'exam' => $exam]);
}
该视图提出了问题和可能的答案。问题是每次刷新页面时,我都会收到另一个问题(由于随机化功能)。当我单击下一个按钮并返回(使用分页箭头)时,我得到另一个随机问题。这是由于分页箭头再次调用路由,所以使用了控制器内部的随机函数。
我想改变这种行为并且:
- 读取所有问题(以及每个问题的可能答案),一旦调用路线并显示页面,只要用户前进或后退问题,问题将保持相同的顺序。
- 保持答案的状态,这样当用户返回或前进时,他选择的答案会被记住。
我相信这意味着我不能使用分页,对吧?关于如何做到这一点的任何其他想法?