我想创建一个显示一组图像(横幅)的简单应用程序,当重新加载页面时,它应该显示另一组图像。
每个图像都有一个名为order
的属性,它是一个整数。
例如,当您第一次打开主页时,应显示三个 [1,3,5] 中order
值的图像。页面重新加载后,应显示 [2,4,6] 中order
值的图像。如果您再次重新打开页面,则应再次显示 [1,3,5] 中order
值的图片。等等...
因此,基本上, [1,3,5] 和 [2,4,6] 中order
值的图片应在每页上切换重装。
在我的控制器中,我尝试过以下操作:
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] :< / p>
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 :(得分: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);
}
试试这段代码。如果它不起作用,我建议用cookie替换会话。