Laravel 5.3 - 在会话中存储和检索多个键值对

时间:2016-12-22 00:05:19

标签: php laravel session

我使用Laravel 5.3构建测验,我想将结果存储在会话中。因此,每次用户提交测验响应时,结果都会添加到会话数组中。

例如,我想存储这样的答案:

answers = [q1 =正确,q2 =正确,q3 =不正确,......]

然后在测验结束时,我希望能够检索并列出结果,并且可能将正确的答案设置为绿色并且扭曲的答案为红色。

有人可以提供有关如何实现这一目标的任何指导吗?

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是将响应存储为JSON编码的字符串。

session([
  'answers' => json_encode([
      [
          'q1'=>'correct',
          'q2'=>'correct',
          'q3'=>'incorrect'
      ]
  ])
]);

有更优雅的解决方案但是可以解决问题。

答案 1 :(得分:0)

您可以简单地使用session()辅助函数来实现此

对于答案

public function answer($questionId)
{
  $question = Question::findOrFail($id);

  if(!session()->has('question.answers')) {
    session()->put('question.answers', [[       //Notice the 2 brackets. Y? Checkout below.
      $question->id => request()->get('answer')
    ]]);
  } else {
    session()->push('question.answers', [        //pushing into array
      $question->id => request()->get('answer')
    ]);
  }
}

在测验结束时

public function end($question)
{
  $answers = session()->get('question.answers');
  // Output: [ [1 => 'answer1'], [2 => 'answer2'] ]

  $answers = array_flatten($answers);
  // Output: [ 1 => 'answer1', 2 => 'answer2' ]
}