web-dev-qa-db-ja.com

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]を試しましたが、これにより配列全体が削除されます。次に、ループと設定解除を試みましたが、どちらも機能しません。どんな助けでもありがたいです。

13
Jakob Fuchs

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::Push('user.teams', 'developers');
_

したがって、次のように配列のインデックスにアクセスできる場合もあります。

_Session::forget('event_data_display.' . $i);
_

試したことはありませんが、試してみる価値はあります。

Session::get('event_data_display')[$i]を呼び出すと、PHPがSession::get('event_data_display')から配列値を取得するbeforeが検索するため、機能する理由は_$i_インデックスに格納されている値。

Session::forget('event_data_display')を呼び出すと、forget()メソッドは渡されたものに対してのみ機能します。

29
patricksayshi

次のコードを使用して解決します。削除する値を配列で"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

追加

session()->save();

セッションをクリアした後。次に、セッションの値のみが削除されます。

0
Jishnu RS