【发布时间】:2017-02-20 16:45:31
【问题描述】:
我想创建一个显示一组图像(横幅)的简单应用,当重新加载页面时 - 它应该显示另一组图像。
每个图像都有一个名为order 的属性,它是一个整数。
例如,第一次打开首页时,应该显示三张图片,order 值在 [1, 3, 5] 中。页面重新加载后,应显示 [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]:
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] - 它会一直停留在那里,无论我刷新页面多少次,都只会显示该组图像。
【问题讨论】:
-
你可以清理很多代码
标签: php laravel session laravel-5