从 Laravel Session 数组中删除项目

Posted

技术标签:

【中文标题】从 Laravel Session 数组中删除项目【英文标题】:Delete items from Laravel Session array 【发布时间】: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],但这会删除整个数组。然后我尝试循环和取消设置,这也不起作用。任何帮助表示赞赏。

【问题讨论】:

【参考方案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] 时,原因是phpSession::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 中的值被删除。

【讨论】:

以上是关于从 Laravel Session 数组中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 不会删除/更新会话

PHP从数组中删除项目? [复制]

Laravel - 从会话数组中获取项目

如何取消设置 laravel 会话数组

laravel session

laravel 会话刷新和忘记方法无法按预期工作