从Laravel会话数组中删除项目

时间:2014-01-20 19:22:55

标签: php arrays session laravel

我试图从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],但这会删除整个数组。然后我尝试循环和取消设置,这也不起作用。任何帮助表示赞赏。

5 个答案:

答案 0 :(得分:26)

当您致电Session::forget('event_data_display')[$index]时,$index变量无法传递到forget()方法。所以Laravel不会看到它,并且会取消整个事件_data_display&#39; Session数组的索引。

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

$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()方法只能对传递给它的内容采取行动。

答案 1 :(得分:0)

我使用以下代码解决它。只需将要在数组中删除的值作为"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;
            }
        }
    }
}

答案 2 :(得分:0)

添加

session()->save();

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

答案 3 :(得分:-3)

在我看来,您正尝试从array中存储的sessions中删除值。要做到这一点,我认为你想要做标准数组unset($array[$key])

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

答案 4 :(得分:-3)

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

$请求 - &GT;会话() - &GT;冲洗();