Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.12.2014 21:37:43

Александр

Как удалить массив Cookie?

В общем, нужно удалить массив кук:
По одной каждая кука удаляется.

$tempCookie = Cookie::forget($id);
         return Redirect::to('/cart/index')->withCookie($tempCookie);

Но либо этот код должен выплнится в цикле, либо withCookie должен передать массив.

#2 21.12.2014 22:33:29

Re: Как удалить массив Cookie?

Красивого решения не нашел. Пришлось по быдлокодить, и вот что у меня получилось.

public function getCookdel($id){
     foreach($_COOKIE as $key => $value){
         $key = (int)$key;
         if($key > 0){
         $tempCookie = Cookie::forget($key);
         return Redirect::to('cart/'.$key.'/cookdel')->withCookie($tempCookie);
         }
      }
        return Redirect::to('cart/index');
    }

Такой код в принципе работает. Но циклическое перенаправление с удалением по одной куки мне не нравится. Должно быть более изящное решение. Например, передать в withCookie массив. Не понятно, почему, withErrors принимает массив, а withCookie нет...

Не в сети

#3 22.12.2014 10:33:31

Re: Как удалить массив Cookie?

Куки можно удалять обычным php способом.

public function delcookie(){
foreach($_COOKIE as $key){
if(!is_int($key)) continue;
setcookie($key,' ');
}
return Redirect::to('cart/index');
}

функция удалить все куки, имена которые, целые числа.

На деле не пробовал.

P.S. Для хранения карзины в куках, я использую json формат. {"1":{"price":1000, "amount":2}}. И что бы очистить корзину, достаточно удалить одну куку.

Не в сети

#4 22.12.2014 10:57:10

Re: Как удалить массив Cookie?

Проверил. Увы не работает..

Не в сети

#5 22.12.2014 17:43:29

Wide

Re: Как удалить массив Cookie?

Но либо этот код должен выплнится в цикле

Логично. Почему не сделал?

циклическое перенаправление с удалением по одной куки мне не нравится

Сервер тоже будет не в восторге.

Route::get('cookie', function()
{
    $cookies = [
        'first',
        'second',
        'third',
    ];
    
    foreach($cookies as $cookie)
    {
        Cookie::queue($cookie, null);
    }
    
    return Response::make('Cookies were added');
});
Route::get('cookie/clear', function()
{
    $cookies = [
        'first',
        'second',
        'third',
    ];
    
    foreach($cookies as $cookie)
    {
        Cookie::queue($cookie, null, -1);
    }
    
    return Response::make('Cookies were removed');
});

Подвал раздела