在选择标签中显示旧数据

问题描述

我知道有一些类似的问题,我已经尝试应用他们的解决方案,但它仍然没有显示 daysToDeliver 属性的旧数据。我认为这是因为我没有设法在 echo 中正确使用它。

 <select name="daysToDeliver"
     class="form-control @error('daysToDeliver') is-invalid @enderror"required>
      <?PHP 
       $start_date = 1;
       $end_date   = 90;
       for( $j=$start_date; $j<=$end_date; $j++ ) {
           echo '<option value='.$j.'>'.$j.'</option>';
       }
      ?>
   </select>

是否有任何想法将旧数据显示为选定选项?

解决方法

您可以像这样使用旧功能。

  <select name="daysToDeliver"
     class="form-control @error('daysToDeliver') is-invalid @enderror"required>
      <?php 
       $start_date = 1;
       $end_date   = 90;
       $selected = null;
       for( $j=$start_date; $j<=$end_date; $j++ ) {
          if(old('daysToDeliver') == $j){
            $selected = ' selected';
          }
          echo '<option value='".$j.".$selected.'>'.$j.'</option>';
          $selected = null;
       }
      ?>
   </select>
,

Laravel 支持指令的更高版本。所以最好避免使用php标签。 你可以试试这个代码:

   <select name="daysToDeliver"
     class="form-control @error('daysToDeliver') is-invalid @enderror" required>
      @for ($i = 1; $i <= 90; $i++)
           <option value="{{$i}}" {{(old('daysToDeliver') == $i) ? 'selected': ''}} >{{$i}}</option>';
      @endfor
   </select>
,

您似乎在使用 Laravel,请注意 @error Blade 指令,它应该会让我们的生活更轻松。

当您使用 Laravel 时,您可以使用其内置的 old 辅助函数,它完全符合您的要求。

基本上,old 通过其键(即表单元素的 name 属性)从最后一次请求返回表单元素的值。例如,要从您的 select 元素中获取所选项目,您只需执行 old('daysToDeliver'),然后您将获得用户选择的项目或 null* 如果没有选择任何元素。

*:我们可以通过传递我们想要的返回值作为 old 函数的第二个参数来改变默认行为,如果元素 在上次请求中找不到。所以,old('form_element_name',5) 将返回 5,而不是 null,如果 form_element_name 键不能 被发现。

为了回答您的问题,这里有一个简单的解决方案:

<select name="daysToDeliver" class="form-control @error('daysToDeliver') is-invalid @enderror" required>
      <?php 
       $start_date = 1;
       $end_date   = 90;
       for( $j=$start_date; $j<=$end_date; $j++ ) {
           echo '<option value="'.$j.'" '.(old('daysToDeliver') == $j ? 'selected':'').'>'.$j.'</option>';
       }
      ?>
</select>

请注意,old('daysToDeliver') == $j ? 'selected':'' 部分将选择用户在提交 form 时选择的项目。

无论如何,为了简单起见,可以使用 Blade 改进答案 指令而不是直接注入 php 块。