单选字段列表仅给出 laravel 中的最后一个值

Radio field list giving only last value in laravel

我有一个带有一些值(从 1 到 5)的单选字段,我基本上需要它来检索用户的输入值。我将它放在 blade 模板中的 foreach 循环中,但是当我尝试检索该值时,它只获取 for 循环的最后一个值(在本例中为 5)。即使我 select 其他值它总是得到值 5。 这里有一些代码。

$gradings = range(1, 5);

模板

               @foreach ($learning_objectives as $key=> $lo)
                  <tr>
                    <td id="learning_obj">{{ $lo->name }}</td>
                    @foreach ($gradings as $grade)
                    <td>
                        <input name="grade{{ $lo->name }}" type="radio" id="radio{{ $grade }}" class="form-check {{ $grade }}" value="{{$grade}}" required="">
                        <label for="radio{{ $grade }}"></label>
                        <input type="hidden" name="grade[{{ $key }}]" value="{{ $grade }}">

                    </td>
                    @endforeach
                    <td>
                      <input type="text" class="form-control" name="note[]" id="note" />
                    </td>
                  </tr>
                  @endforeach

控制器

$grade_list = $request->grade; //probably that is the main issue, but I don't know how to get this value
    $fail = $request->fail;
    $mi = new MultipleIterator();
    $mi->attachIterator(new ArrayIterator($learning_objectives));
    $mi->attachIterator(new ArrayIterator($note));
    $mi->attachIterator(new ArrayIterator($grade_list));
    foreach ($mi as $value) {
        list($lo, $n, $g) = $value;
        $mission_entry = new MissionEntry();
        $mission_entry->learning_objective_id = $lo['id'];
        $mission_entry->grade = $g; //this value is always stored as 5, even though I select other values
        $mission_entry->comment = $n;
        $mission_entry->student_id = $student->id;
        $mission_entry->mission_id = $mission_id;
        $mission_entry->log_entry_id = $log_entry->id;
        $mission_entry->save();
    }

我回答我自己的问题,因为最终我找到了答案。它可能对任何有类似情况的人都有用。 基本上,我删除了隐藏的输入并使用单选字段的名称字段。问题是在名称字段中我有一些带有 space 的变量,所以我必须找到一个非常冗长的解决方案。

模板

@foreach ($mission_entry as $key=> $lo)
                  <tr>
                    <td id="learning_obj">{{ $lo->learning_objective->name }}</td>
                    @foreach ($gradings as $grade)
                    <td>
                        <input name="grade{{ str_replace(' ', '', $lo->learning_objective->name) }}" {{ ($grade == $lo->grade) ? 'checked' : '' }} type="radio" id="radio{{ $grade }}" class="form-check {{ $grade }}" value="{{$grade}}" required="">
                        <label for="radio{{ $grade }}"></label>

                    </td>
                    @endforeach
                    <td>
                      <input type="text" value="{{ $lo->comment }}" class="form-control" name="note[]" id="note" />
                    </td>
                  </tr>
                  @endforeach

首先,我删除了输入名称中的 space。

$grade_list = array();
    foreach ($learning_objectives as $key => $lo) {
        $string = $lo['name'];
        $string = str_replace(' ', '', $string);
        $grade_list[] = 'grade' . $string;
    }

这会创建一个数组,其中的名称没有任何 space 最后但并非最不重要的是,我可以检索值。

foreach ($grade_list as $key => $g) {
        $grades[] = $request->$g;
    }

希望有人觉得有用。