从Laravel Session数组中删除项目

15

我试图从Laravel Session数组中删除项目,但迄今为止没有成功。

我使用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],但这会删除整个数组。然后我尝试了循环和取消设置,但也没有起作用。任何帮助都将不胜感激。

5个回答

32
当您调用Session::forget('event_data_display')[$index]时,$index变量没有传递到forget()方法中的任何点。因此,Laravel不会看到它,并将取消设置会话数组的整个'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在查找存储在$i索引处的值之前,从Session::get('event_data_display')中检索数组值。

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


1
$event_data_display = Session::get('event_date_display'); unset($event_data_display[$index]); Session::set('event_data_display', $event_data_display);这个可以用,谢谢。 - Jakob Fuchs
4
对于这个答案点个赞:Session::forget('event_data_display.' . $i); - Mokhlesur Rahman

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;
            }
        }
    }
}

1
谢谢!我使用了会话助手稍作调整,代码变得更加简洁。 - oussama benounnas

0

添加

session()->save();

清除会话后,只有会话中的值才会被删除。


-3

在我看來,您正試圖從存儲在sessions中的array中刪除一個值。為此,我認為您想執行標準array unset($array[$key])

因此,這將類似於unset(Session::$array[$key]);


-5

只需使用以下代码在 Laravel 中删除所有会话

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


2
这怎么可能是远程适用的呢? - StackOverflowed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接