2014-01-20 4 views
11

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

Я храню значения в массиве сеансов с использованием 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], но это удалит весь массив. Затем я попробовал зацикливание и отключение, которое тоже не работает. Любая помощь приветствуется.

ответ

25

Когда вы звоните 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); 

Session Laravel уже поддерживают добавление к массивам с помощью определенного индекса, например так:

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() может действовать только на то, что ему передается.

+0

$ event_data_display = Session :: get ('event_date_display'); unset ($ event_data_display [$ index]); Session :: set ('event_data_display', $ event_data_display); Это работает, спасибо. –

+0

Отлично! Вы должны щелкнуть галочку, чтобы принять ее как правильный ответ. – patricksayshi

+0

Есть ваши баллы;) –

-2

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

Так что это было бы что-то вроде unset(Session::$array[$key]); Я верю.

-2

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

$ request-> сеанс() -> вровень();

+0

Как это ... удаленно применимо? – StackOverflowed

Смежные вопросы