web-dev-qa-db-fra.com

Supprimer des éléments de Laravel Tableau de session

j'essaie de supprimer des éléments de la Laravel Session Array, mais sans succès jusqu'à présent.

Je stocke mes valeurs dans un tableau de session à l'aide de la méthode 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'));

Je peux accéder aux valeurs telles que les tableaux normaux: 

        @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

Mais je n'arrive pas à comprendre comment les supprimer. J'ai essayé Session :: forget ('event_date_display') [$ index], mais cela supprime tout le tableau. Ensuite, j'ai essayé de boucler et de désactiver, ce qui ne fonctionne pas non plus. Toute aide est appréciée.

12
Jakob Fuchs

Lorsque vous appelez Session::forget('event_data_display')[$index], il n'y a aucun moment où cette variable $index est transmise à la méthode forget(). Donc, Laravel ne le verra pas et annulera la totalité de l'index 'event_data_display' du tableau Session. 

Pour supprimer la valeur de cet index, vous devrez probablement faire quelque chose comme ceci:

$event_data_display = Session::get('event_date_display');
unset($event_data_display[$index]);
Session::set('event_data_display', $event_data_display);

Laravel's Session supporte en ajoutant aux tableaux via un index spécifié comme ceci: 

Session::Push('user.teams', 'developers');

Ainsi, vous pourrez également accéder à cet index du tableau comme suit:

Session::forget('event_data_display.' . $i);

Je n'ai pas essayé mais ça vaut le coup.

Lorsque vous appelez Session::get('event_data_display')[$i], la raison qui fonctionne est que PHP récupère la valeur du tableau à partir de Session::get('event_data_display') before il recherche la valeur stockée dans l'index $i

Lorsque vous appelez Session::forget('event_data_display'), la méthode forget() ne peut agir que sur ce qui lui est transmis. 

26
patricksayshi

Ajouter

session()->save();

après avoir terminé la session. Alors seules les valeurs de la session sont supprimées.

0
Jishnu RS

Je le résous en utilisant le code suivant. Il suffit de transmettre à votre contrôleur la valeur que vous souhaitez supprimer dans le tableau sous la forme d'un "id", comme le code ci-dessous.

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