从 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]
时,原因是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 中的值被删除。
【讨论】:
以上是关于从 Laravel Session 数组中删除项目的主要内容,如果未能解决你的问题,请参考以下文章