2017-02-20 18 views
0

Я хочу создать простое приложение, которое отображает группу изображений (баннеров), а когда страница перезагружается - она ​​должна отображать другую группу изображений ,Laravel Sessions: на странице reload (refresh) отобразить другую группу изображений

Каждое изображение имеет свойство order, которое является целым числом. Например, когда вы впервые открываете домашнюю страницу, должны отображаться три изображения с order значениями в [1, 3, 5]. После перезагрузки страницы должны отображаться изображения с order значениями в [2, 4, 6]. И если вы снова откроете страницу - тогда изображения с order значениями в [1, 3, 5] должны быть отображены снова. И так далее ...

Так, в основном, изображения с order значениями в [1, 3, 5] и [2, 4, 6] следует переключить на каждой перезагрузки страницы.

В моем контроллере я попытался следующим:

public function index() { 

    if (!\Session::has('top_order')) { 
     $top_banners = TopBanner::where('position', 'top') 
      ->whereIn('order', [1, 3, 5]) 
      ->orderBy('order') 
      ->get(); 
     \Session::put('top_order', [2, 4, 6]); 
    } else { 
     $next_orders = \Session::get('top_order'); 

     $top_banners = TopBanner::where('position', 'top') 
      ->whereIn('order', $next_orders) 
      ->orderBy('order') 
      ->get(); 

     if ($next_orders[0] == 1) { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]++; 
      } 
     } else { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]--; 
      } 
     } 

     \Session::put('top_order', $next_orders); 
    } 

    return view('welcome')->with('top_banners', $top_banners); 
} 

Но по какой-то причине, изображения не переключаются. Как вы можете видеть в блоке else, когда страница перезагружается (когда отправляется HTTP-запрос и выполняется метод index в контроллере) - сначала я получаю из сеанса 'top_order' следующую группу изображений, которые должны отображаться:

$next_orders = \Session::get('top_order'); 

... а затем я хочу обновить сеанс 'top_order' - я хочу установить его значение для другой группы заказов. Таким образом, если текущее значение сессии 'top_order' является [1, 3, 5] - затем обновить его до [2, 4, 6]:

 if ($next_orders[0] == 1) { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]++; 
      } 
     } 

... и если текущее значение из сеанса 'top_order' является [2, 4, 6] - затем обновить его [1, 3, 5]:

 else { 
      for ($i = 0; $i < count($next_orders); $i++) { 
       $next_orders[$i]--; 
      } 
     } 

Наконец, за исключением:

\Session::put('top_order', $next_orders); 

Но это не работает, и я не вижу, что я делаю неправильно. Как только сеанс 'top_order' установлен в [2, 4, 6] - он останется там, только эта группа изображений будет отображаться независимо от того, сколько раз я обновляю страницу.

+0

Вы можете очистить свой код alot – xhulio

ответ

0
public function index() { 
$first_order = [1,3,5]; 
$second_order = [2,4,6]; 
if (!\Session::has('top_order')) { 
    \Session::put('top_order', $first_order); 
} else { 
    \Session::put('top_order', (\Session::get('top_order') == $first_order) : $second_order ? $first_order)); 
} 
    $top_banners = TopBanner::where('position', 'top') 
     ->whereIn('order', \Session::get('top_order')) 
     ->orderBy('order') 
     ->get(); 

    return view('welcome')->with('top_banners', $top_banners); 
} 

Попробуйте этот код. Если это не сработает, я бы предложил заменить сессию куки.

+0

Для метода 'put' требуются два аргумента: * session key * и * session value * (' put ('key', 'value') ') https://laravel.com /docs/5.2/session. Таким образом, ваш блок ** else ** не будет работать, потому что у вас есть '\ Session :: put ('top_order') = (...'. – PeraMika

+0

жаль, что я спешил, когда я ответил. Я отредактировал его сейчас, это должно работать , – xhulio