Удаление элементов из массива сеансов Laravel

im пытается удалить элементы из массива сеансов Laravel, но пока не повезло.

Я сохраняю свои значения в массиве Session с помощью метода Session:: push():

  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

Когда вы вызываете Session::forget('event_data_display')[$index], нет никакой точки, в которой эта переменная $index передается в метод forget(). Поэтому Laravel не увидит его и отключит весь индекс event_data_display массива 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() может действовать только на то, что ему передается.

Ответ 2

Я решаю это с помощью следующего кода. Просто передайте значение, которое вы хотите удалить в массиве как "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;
            }
        }
    }
}

Ответ 3

добавлять

session()->save();

после очистки сеанса. Тогда удаляются только значения в сеансе.

Ответ 4

Мне кажется, что вы пытаетесь удалить значение из array, хранящегося в sessions. Для этого я бы подумал, что вы хотите сделать стандартный массив unset($array[$key]).

Значит, это было бы как-то вроде unset(Session::$array[$key]);.

Ответ 5

Просто используйте ниже код, чтобы удалить весь сеанс в laravel

$request- > сессия() → вровень();