【问题标题】:Delete items from Laravel Session array从 Laravel Session 数组中删除项目
【发布时间】:2014-02-10 02:50:53
【问题描述】:

我试图从 Laravel 会话数组中删除项目,但到目前为止没有运气。

我使用 Session::push() 方法将值存储在 Session 数组中:

  Session::push('event_date_display', Input::get('event_date'));
  Session::push('event_start_display', Input::get('event_start'));
  Session::push('event_entry_display', Input::get('event_entry'));
  Session::push('event_end_display', Input::get('event_end'));

我可以像普通数组一样访问值:

        @for($i=0;$i<Session::get('dates');$i++)
          <tr>
            <td>{{ Session::get('event_date_display')[$i] }}</td>
            <td>{{ Session::get('event_start_display')[$i] }}</td>
            <td>{{ Session::get('event_entry_display')[$i] == '' ? '-' : Session::get('event_entry_display')[$i] }}</td>
            <td>{{ Session::get('event_end_display')[$i] == '' ? '-' : Session::get('event_end_display')[$i] }}</td>
            <td><a href="{{URL::route('termin-loeschen', $i)}}" class="del"><span class="icon-spam"></span>Loeschen {{ $i }}</a></td>
          </tr>
        @endfor

但我不知道如何删除它们。我尝试了 Session::forget('event_date_display')[$index],但这会删除整个数组。然后我尝试循环和取消设置,这也不起作用。任何帮助表示赞赏。

【问题讨论】:

    标签: php arrays session laravel


    【解决方案1】:

    在我看来,您正试图从存储在sessions 中的array 中删除一个值。为此,我认为您想做标准数组unset($array[$key])

    所以我相信它会类似于unset(Session::$array[$key]);

    【讨论】:

      【解决方案2】:

      当您调用Session::forget('event_data_display')[$index] 时,$index 变量不会被传递到forget() 方法中。所以 Laravel 不会看到它,并且会取消设置 Session 数组的整个 'event_data_display' 索引。

      要取消设置该索引处的值,您可能需要执行以下操作:

      $event_data_display = Session::get('event_date_display');
      unset($event_data_display[$index]);
      Session::set('event_data_display', $event_data_display);
      

      Laravel 的 Session 支持 添加 到数组通过指定的索引像这样:

      Session::push('user.teams', 'developers');
      

      所以你也可以像这样访问数组的索引:

      Session::forget('event_data_display.' . $i);
      

      我没试过,但值得一试。

      当您调用Session::get('event_data_display')[$i] 时,原因是PHP 从Session::get('event_data_display') 检索数组值之前 它查找存储在$i 索引处的值。

      当您调用Session::forget('event_data_display') 时,forget() 方法只能作用于传递给它的内容。

      【讨论】:

      • $event_data_display = Session::get('event_date_display');未设置($event_data_display[$index]);会话::set('event_data_display', $event_data_display);这行得通,谢谢。
      • +1 这个答案Session::forget('event_data_display.' . $i);
      【解决方案3】:

      只需使用以下代码删除 laravel 中的所有会话

      $request->session()->flush();

      【讨论】:

      • 这怎么……远程适用?
      【解决方案4】:

      我使用以下代码解决了这个问题。只需将要在数组中删除的值作为"id" 传递给您的控制器,如下面的代码

      public function removeAddTocart(Request $request)
      {
          $remove = ''.$request->id.'';
      
          if (Session::has('productCart'))
          {
              foreach (Session::get('productCart') as $key => $value) 
              {
                  if ($value === $remove)
                  {
                      Session::pull('productCart.'.$key); // retrieving the value and remove it from the array
                      break;
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案5】:

        添加

        session()->save();
        

        清除会话后。然后只有 session 中的值被删除。

        【讨论】:

          猜你喜欢
          • 2017-03-31
          • 1970-01-01
          • 2019-05-02
          • 2021-10-19
          • 2021-10-03
          • 2016-12-10
          • 2014-09-21
          • 2021-08-01
          • 1970-01-01
          相关资源
          最近更新 更多