Laravel Sessions: при перезагрузке страницы (обновлении) отображается другая группа изображений

Я хочу создать простое приложение, которое отображает группу изображений (баннеров), а когда страница перезагружается — оно должно отображать другую группу изображений.

Каждое изображение имеет свойство под названием 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

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector