我有一个带有laravel后端和Vue前端的测验应用程序。我正在为该应用程序开发API。但是,我遇到的问题是我需要一个API端点:从“问题”表返回一个问题-但它需要:
到目前为止,我一直在使用shuffle方法对问题集合进行随机化,并依靠Sessions存储未见问题的ID。
但是,由于API调用是无状态的,因此会话将无法工作。我想知道如何解决这个问题?
public function random(Module $module, $category){
// Get question ids in randomised order (for a given module + category)
$questions = Question::CategoryForModule(1, $module->id)->shuffle()->pluck('id');
// Name and Get unseenQuestions
$sessionName = 'unseenQuestions_' . $category . strval($module->id); //unseenQuestions_anatomy_2
if (session()->has($sessionName)) {
$unseenQuestions = session()->get($sessionName);
} else {
$unseenQuestions = collect($questions);
}
// Pop new Question
$newQuestionID = $unseenQuestions->shift();;
// Store unseenQuestions OR remove unseenQuestions (if it has no items);
if ($unseenQuestions->count() == 0) {
session()->forget($sessionName);
} else {
session()->put($sessionName, $unseenQuestions);
}
return new QuestionResource(Question::find($newQuestionID));
}
答案 0 :(得分:0)
您可以采用以下方法之一
seen
(在数据库中)seen
个问题。应避免使用这种恕我直言的方法,因为它是可利用的,并且您委托客户端决定是否看到问题。我会选择第一个选项。